bluetooth-client: avoid an infinite loop scenario
authorJanos Kovacs <jankovac503@gmail.com>
Thu, 6 Jun 2013 13:42:57 +0000 (16:42 +0300)
committerKrisztian Litkey <krisztian.litkey@intel.com>
Thu, 6 Jun 2013 13:56:55 +0000 (16:56 +0300)
src/plugins/bluetooth-client/pulseif.c

index fcb9fbd..a797971 100644 (file)
@@ -703,10 +703,12 @@ static void write_callback(pa_stream *stream, size_t bytes, void *userdata)
     if (card->output.stream && stream != card->output.stream)
         goto confused;
 
+    size = device->audio.end - device->audio.start;
+
     while (bytes > 0) {
 
         if (card->input.state != ST_READY || !(buf = device->audio.buf) ||
-            buf->samples <= card->output.sent)
+            buf->samples <= card->output.sent || size <= card->output.sent)
         {
             len = (sizeof(silence) < bytes) ? sizeof(silence) : bytes;
 
@@ -714,7 +716,6 @@ static void write_callback(pa_stream *stream, size_t bytes, void *userdata)
                 goto could_not_write;
         }
         else {
-            size = device->audio.end - device->audio.start;
             len  = (size - card->output.sent) * sizeof(int16_t);
             offs = device->audio.start + card->output.sent;