Commit 2e7c0ee8 authored by RODRIGUEZ Christophe's avatar RODRIGUEZ Christophe Committed by Arun Raghavan

raop: Fix infinite loop in raop-sink with UDP mode

There are potentially unresolved issues around the EAGAIN logic, but
this should prevent an infinite loop and log flood in the mean time.

Fixes: pulseaudio/pulseaudio#695
parent 27e72814
Pipeline #56974 passed with stage
in 4 minutes and 36 seconds
......@@ -388,6 +388,10 @@ static void thread_func(void *userdata) {
ssize_t read;
for (i = 0; i < nbfds; i++) {
if (pollfd->revents & POLLERR) {
/* one of UDP fds is in faulty state, may have been disconnected, this is fatal */
goto fail;
}
if (pollfd->revents & pollfd->events) {
pollfd->revents = 0;
read = pa_read(pollfd->fd, packet, sizeof(packet), NULL);
......@@ -431,7 +435,7 @@ static void thread_func(void *userdata) {
/* Just try again. */
pa_log_debug("Failed to write data to FIFO (EINTR), retrying");
goto fail;
} else if (errno != EAGAIN) {
} else if (errno != EAGAIN && !u->oob) {
/* Buffer is full, wait for POLLOUT. */
pollfd->events = POLLOUT;
pollfd->revents = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment