From 26e97c601793cc44d6db157c0a063de5fb3d17dc Mon Sep 17 00:00:00 2001 From: Dimitris Papastamos <s...@2f30.org> Date: Wed, 22 Jun 2016 14:30:00 +0100 Subject: [PATCH] sndio: Fix segmentation fault when audio card is removed
This can happen if you remove an external audio card or if you stop sndiod(8) while playing a song. sio_write() will retry internally if it fails with errno == EINTR so no need to handle that. --- src/output/plugins/SndioOutputPlugin.cxx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/output/plugins/SndioOutputPlugin.cxx b/src/output/plugins/SndioOutputPlugin.cxx index eac302a..e0897ca 100644 --- a/src/output/plugins/SndioOutputPlugin.cxx +++ b/src/output/plugins/SndioOutputPlugin.cxx @@ -17,7 +17,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include <errno.h> #include <sndio.h> #include <string.h> #include <unistd.h> @@ -183,11 +182,11 @@ SndioOutput::Play(const void *chunk, size_t size, Error &error) while (1) { n = sio_write(sio_hdl, chunk, size); - if (n < 0) { - if (errno == EINTR) - continue; - error.FormatErrno("Failed to write %zu bytes to sndio output", size); - return 0; + if (n == 0) { + if (sio_eof(sio_hdl)) { + error.Set(sndio_output_domain, -1, "sndio write failed"); + return 0; + } } return n; } -- 2.8.4 _______________________________________________ mpd-devel mailing list mpd-devel@musicpd.org http://mailman.blarg.de/listinfo/mpd-devel