Mercurial > audlegacy-plugins
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; + } + } }