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>
This commit is contained in:
Sergi Granell 2016-02-01 19:35:51 +01:00 committed by Bryce Harrington
parent 14b76a0e24
commit ac36082813

View File

@ -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;