diff src/esd/audio.c @ 217:3f2e3c5c30ed trunk

[svn] - make esd plugin assume that write() isn't always successful due to threading contingency. closes #427. patch by <sjleung -at shaw.ca>.
author nenolod
date Sat, 04 Nov 2006 23:03:45 -0800
parents 3da1b8942b8b
children 469078516127
line wrap: on
line diff
--- a/src/esd/audio.c	Sat Nov 04 13:14:27 2006 -0800
+++ b/src/esd/audio.c	Sat Nov 04 23:03:45 2006 -0800
@@ -299,10 +299,19 @@
         length =
             ep->mod_samples(&data, length, input_format, input_frequency,
                             input_channels);
-    if (esd_translate)
-        output_bytes += write(fd, esd_translate(data, length), length);
-    else
-        output_bytes += write(fd, data, length);
+    while (length > 0) {
+        int num_written;
+        if (esd_translate)
+            num_written = write(fd, esd_translate(data, length), length);
+        else
+            num_written = write(fd, data, length);
+        if (num_written <= 0)
+            break;
+        length -= num_written;
+        data += num_written;
+        output_bytes += num_written;
+        }
+    }
 }