From 3e1e3e3679cbe30eb8a2cf7905d709b658c4c1ad Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Thu, 18 Oct 2007 08:32:37 +0000 Subject: Fix poll timeout to avoid unnecessary polls --- audio/pcm_bluetooth.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/audio/pcm_bluetooth.c b/audio/pcm_bluetooth.c index 893a234c..cb440166 100644 --- a/audio/pcm_bluetooth.c +++ b/audio/pcm_bluetooth.c @@ -167,12 +167,17 @@ static void *playback_hw_thread(void *param) double period_time; struct timeval start; struct pollfd fds[2]; + int poll_timeout; fds[0] = data->server; fds[1] = data->stream; prev_periods = 0; period_time = 1000000.0 * data->io.period_size / data->io.rate; + if (period_time > (int) (MIN_PERIOD_TIME * 1000)) + poll_timeout = (int) (period_time / 1000.0f); + else + poll_timeout = MIN_PERIOD_TIME; gettimeofday(&start, 0); @@ -213,7 +218,8 @@ static void *playback_hw_thread(void *param) } iter_sleep: - ret = poll(fds, 2, MIN_PERIOD_TIME); + /* sleep up to one period interval */ + ret = poll(fds, 2, poll_timeout); if (ret < 0) { SNDERR("poll error: %s (%d)", strerror(errno), errno); if (errno != EINTR) -- cgit