[pulseaudio-discuss] [PATCH]raop2: Blocking UDP sockets

Matthias Wabersich pulseaudio at niafc.de
Sat Sep 14 09:36:15 PDT 2013


Hi Rémi, hi Hajime,

>>> 1) it would consume  100% of the CPU time
 >> No, it won't. poll() will *not* return immediately.
 >
 > Oh you're right. For some reason I misunderstood that poll(..., -1)
 > meant "no wait, return immediately" but actually it was "no timeout,
 > wait forever".
 >...
>>> 2) it would block the  message loop (I'm not sure about the real
 >>> implication of this, though)
 >>
 >> But yes.

I understand that either way poll() would block the message loop.
I re-wrote my patch so that packets are discarded when blocking occurs 
(as was my first thought, and Hajime's suggestion as well).
You can find it in my fork of Hajime's repository on github [1] and 
attached below.

Greetings,

Matthias

[1]: 
https://github.com/emwe/pulseaudio-raop2/commit/d9b9c822ef1d0b2b55601b0d2958190644e574fc

diff --git a/src/modules/raop/raop_client.c b/src/modules/raop/raop_client.c
index f699fd8..eb4a582 100644
--- a/src/modules/raop/raop_client.c
+++ b/src/modules/raop/raop_client.c
@@ -560,7 +560,10 @@ static ssize_t udp_send_audio_packet(pa_raop_client 
*c, bool retrans, uint8_t *b
      int fd = retrans ? c->udp_control_fd : c->udp_stream_fd;

      length = pa_write(fd, buffer, size, NULL);
-
+    if ((length == -1) && ((errno == EAGAIN) || (errno == EWOULDBLOCK))) {
+        pa_log_debug("Discarding audio packet %d (blocking)", c->seq);
+        length = size;
+    }
      return length;
  }




More information about the pulseaudio-discuss mailing list