pulse-server: don't ever block

Handle EAGAIN and EWOULDBLOCK and go back into the poll loop instead
of blocking.
This commit is contained in:
Wim Taymans 2020-10-31 21:21:00 +01:00
parent 4bb859fb82
commit 165ad6e758

View file

@ -267,6 +267,8 @@ static int flush_messages(struct client *client)
res = send(client->source->fd, data, size, MSG_NOSIGNAL | MSG_DONTWAIT); res = send(client->source->fd, data, size, MSG_NOSIGNAL | MSG_DONTWAIT);
if (res < 0) { if (res < 0) {
pw_log_info("send channel:%d %zu, res %d: %m", m->channel, size, res); pw_log_info("send channel:%d %zu, res %d: %m", m->channel, size, res);
if (errno == EAGAIN || errno == EWOULDBLOCK)
break;
if (errno == EINTR) if (errno == EINTR)
continue; continue;
else else
@ -3974,7 +3976,10 @@ static int do_read(struct client *client)
size = client->message->length - idx; size = client->message->length - idx;
} }
while (true) { while (true) {
if ((r = recv(client->source->fd, data, size, 0)) < 0) { if ((r = recv(client->source->fd, data, size, MSG_DONTWAIT)) < 0) {
pw_log_info("recv client:%p res %d: %m", client, res);
if (errno == EAGAIN || errno == EWOULDBLOCK)
goto exit;
if (errno == EINTR) if (errno == EINTR)
continue; continue;
res = -errno; res = -errno;