summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergi Granell <xerpi.g.12@gmail.com>2016-02-01 19:35:51 +0100
committerBryce Harrington <bryce@bryceharrington.org>2016-02-01 15:53:48 -0800
commitac36082813c459e64ae1f564002a7cadfa0a7637 (patch)
treeb82fedcb672e5df31874a89e81e0f9d64f4c48fe
parent14b76a0e24c988334c18f477572a556ba005b182 (diff)
downloadwayland-ac36082813c459e64ae1f564002a7cadfa0a7637.tar.gz
server: Fix possible wl_display_add_socket_fd memleak
If wl_event_loop_add_fd failed, the fail path didn't free the newly allocated struct wl_socket. Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
-rw-r--r--src/wayland-server.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/wayland-server.c b/src/wayland-server.c
index 6654cd7..3ba8a5d 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -1268,17 +1268,18 @@ wl_display_add_socket_fd(struct wl_display *display, int sock_fd)
if (s == NULL)
return -1;
- /* Reuse the existing fd */
- s->fd = sock_fd;
-
- s->source = wl_event_loop_add_fd(display->loop, s->fd,
+ s->source = wl_event_loop_add_fd(display->loop, sock_fd,
WL_EVENT_READABLE,
socket_data, display);
if (s->source == NULL) {
wl_log("failed to establish event source\n");
+ wl_socket_destroy(s);
return -1;
}
+ /* Reuse the existing fd */
+ s->fd = sock_fd;
+
wl_list_insert(display->socket_list.prev, &s->link);
return 0;