From 3d48ba8394396fc8d8cadb1bff3514217ddd70e6 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 1 Oct 2019 10:43:48 +0200 Subject: [PATCH] connection: move remaining data and fds If we can't send all of the data, move the remaining data to the start of the buffer so that we can send it again later. See #111 --- .../module-protocol-native/connection.c | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/modules/module-protocol-native/connection.c b/src/modules/module-protocol-native/connection.c index f51129dfe..7b6cf1129 100644 --- a/src/modules/module-protocol-native/connection.c +++ b/src/modules/module-protocol-native/connection.c @@ -500,8 +500,12 @@ int pw_protocol_native_connection_flush(struct pw_protocol_native_connection *co if (sent < 0) { if (errno == EINTR) continue; - else - goto send_error; + else { + res = -errno; + pw_log_error("could not sendmsg on fd:%d n_fds:%d: %s", + conn->fd, n_fds, spa_strerror(res)); + goto exit; + } } break; } @@ -513,15 +517,16 @@ int pw_protocol_native_connection_flush(struct pw_protocol_native_connection *co n_fds -= outfds; fds += outfds; } + + res = 0; + +exit: + if (size > 0) + memmove(buf->buffer_data, data, size); buf->buffer_size = size; + if (n_fds > 0) + memmove(buf->fds, fds, n_fds * sizeof(int)); buf->n_fds = n_fds; - - return 0; - - /* ERRORS */ -send_error: - res = -errno; - pw_log_error("could not sendmsg on fd:%d n_fds:%d: %s", conn->fd, n_fds, strerror(errno)); return res; }