From: David Herrmann Date: Thu, 11 Oct 2012 21:37:45 +0000 (+0200) Subject: connection: close pending outgoing fds on shutdown X-Git-Tag: 0.99.0~12 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cda89f3a42789771907a9d6a3159f7c22c99985e;p=platform%2Fupstream%2Fwayland.git connection: close pending outgoing fds on shutdown When destroying a wl_connection object, there might still be data in the queue. We would leak open file-descriptors so we must close them. Signed-off-by: David Herrmann --- diff --git a/src/connection.c b/src/connection.c index 8497670..0df416a 100644 --- a/src/connection.c +++ b/src/connection.c @@ -167,9 +167,27 @@ wl_connection_create(int fd) return connection; } +static void +close_fds(struct wl_buffer *buffer) +{ + int fds[MAX_FDS_OUT], i, count; + size_t size; + + size = buffer->head - buffer->tail; + if (size == 0) + return; + + wl_buffer_copy(buffer, fds, size); + count = size / sizeof fds[0]; + for (i = 0; i < count; i++) + close(fds[i]); + buffer->tail += size; +} + void wl_connection_destroy(struct wl_connection *connection) { + close_fds(&connection->fds_out); close(connection->fd); free(connection); } @@ -206,23 +224,6 @@ build_cmsg(struct wl_buffer *buffer, char *data, int *clen) } static void -close_fds(struct wl_buffer *buffer) -{ - int fds[MAX_FDS_OUT], i, count; - size_t size; - - size = buffer->head - buffer->tail; - if (size == 0) - return; - - wl_buffer_copy(buffer, fds, size); - count = size / sizeof fds[0]; - for (i = 0; i < count; i++) - close(fds[i]); - buffer->tail += size; -} - -static void decode_cmsg(struct wl_buffer *buffer, struct msghdr *msg) { struct cmsghdr *cmsg;