diff options
author | Sergi Granell <xerpi.g.12@gmail.com> | 2016-02-01 19:35:51 +0100 |
---|---|---|
committer | Bryce Harrington <bryce@bryceharrington.org> | 2016-02-01 15:53:48 -0800 |
commit | ac36082813c459e64ae1f564002a7cadfa0a7637 (patch) | |
tree | b82fedcb672e5df31874a89e81e0f9d64f4c48fe | |
parent | 14b76a0e24c988334c18f477572a556ba005b182 (diff) | |
download | wayland-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.c | 9 |
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; |