On Thu, Dec 22, 2011 at 9:52 AM, Pekka Paalanen <ppaala...@gmail.com> wrote: > On wl_display_add_socket(), the listening socket fd is added to the > event loop. However, wl_event_source object is not stored and hence > cannot be freed, resulting in a minor leak. > > Store wl_event_source pointer in struct wl_socket so we can track it, > and destroy it on wl_display_destroy(). The event loop itself must be > destroyed after destroying the event sources linked to it. > > Fixes a Valgrind reported memory leak.
Nice, that looks better overall. Kristian > Signed-off-by: Pekka Paalanen <ppaala...@gmail.com> > --- > src/wayland-server.c | 11 +++++++---- > 1 files changed, 7 insertions(+), 4 deletions(-) > > diff --git a/src/wayland-server.c b/src/wayland-server.c > index 87e4ed5..20504d7 100644 > --- a/src/wayland-server.c > +++ b/src/wayland-server.c > @@ -51,6 +51,7 @@ struct wl_socket { > struct sockaddr_un addr; > char lock_addr[113]; > struct wl_list link; > + struct wl_event_source *source; > }; > > struct wl_client { > @@ -667,14 +668,15 @@ wl_display_destroy(struct wl_display *display) > struct wl_socket *s, *next; > struct wl_global *global, *gnext; > > - wl_event_loop_destroy(display->loop); > wl_list_for_each_safe(s, next, &display->socket_list, link) { > + wl_event_source_remove(s->source); > close(s->fd); > unlink(s->addr.sun_path); > close(s->fd_lock); > unlink(s->lock_addr); > free(s); > } > + wl_event_loop_destroy(display->loop); > > wl_list_for_each_safe(global, gnext, &display->global_list, link) > free(global); > @@ -858,9 +860,10 @@ wl_display_add_socket(struct wl_display *display, const > char *name) > return -1; > } > > - if (wl_event_loop_add_fd(display->loop, s->fd, > - WL_EVENT_READABLE, > - socket_data, display) == NULL) { > + s->source = wl_event_loop_add_fd(display->loop, s->fd, > + WL_EVENT_READABLE, > + socket_data, display); > + if (s->source == NULL) { > close(s->fd); > unlink(s->addr.sun_path); > free(s); > -- > 1.7.3.4 > _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel