summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorWim Taymans <wtaymans@redhat.com>2019-10-01 10:43:48 +0200
committerWim Taymans <wtaymans@redhat.com>2019-10-01 10:45:20 +0200
commit3d48ba8394396fc8d8cadb1bff3514217ddd70e6 (patch)
tree73babfed3164940502147f36885b7d156d70b625 /src/modules
parentf59a43a4f09682b5591b94a141858cf810dd912a (diff)
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
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/module-protocol-native/connection.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/modules/module-protocol-native/connection.c b/src/modules/module-protocol-native/connection.c
index f51129df..7b6cf112 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;
}
- buf->buffer_size = size;
- buf->n_fds = n_fds;
- return 0;
+ res = 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));
+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 res;
}