On Fri, May 09, 2014 at 04:03:51PM +0200, Hardening wrote:
> This patch sets to NULL event sources after a call to wl_event_source_remove()
> has been made.
We don't generally set freed memory to NULL, unless we rely on testing that
to decide whether the pointer points to an object or not.
Kristian
> ---
> src/clipboard.c | 3 ++-
> src/compositor-drm.c | 3 +++
> src/compositor-rpi.c | 1 +
> src/compositor-x11.c | 2 ++
> src/compositor.c | 6 +-
> src/evdev-touchpad.c | 1 +
> src/evdev.c | 4 +++-
> src/libinput-seat.c | 1 +
> src/logind-util.c| 2 ++
> xwayland/launcher.c | 6 +-
> xwayland/selection.c | 9 +++--
> 11 files changed, 32 insertions(+), 6 deletions(-)
>
> diff --git a/src/clipboard.c b/src/clipboard.c
> index 5a3a02d..0e25dc1 100644
> --- a/src/clipboard.c
> +++ b/src/clipboard.c
> @@ -61,6 +61,7 @@ clipboard_source_unref(struct clipboard_source *source)
>
> if (source->event_source) {
> wl_event_source_remove(source->event_source);
> + source->event_source = NULL;
> close(source->fd);
> }
> wl_signal_emit(&source->base.destroy_signal,
> @@ -90,8 +91,8 @@ clipboard_source_data(int fd, uint32_t mask, void *data)
> len = read(fd, p, size);
> if (len == 0) {
> wl_event_source_remove(source->event_source);
> - close(fd);
> source->event_source = NULL;
> + close(fd);
> } else if (len < 0) {
> clipboard_source_unref(source);
> clipboard->source = NULL;
> diff --git a/src/compositor-drm.c b/src/compositor-drm.c
> index 5f59789..0110f41 100644
> --- a/src/compositor-drm.c
> +++ b/src/compositor-drm.c
> @@ -2379,7 +2379,9 @@ drm_destroy(struct weston_compositor *ec)
> udev_input_destroy(&d->input);
>
> wl_event_source_remove(d->udev_drm_source);
> + d->udev_drm_source = NULL;
> wl_event_source_remove(d->drm_source);
> + d->drm_source = NULL;
>
> destroy_sprites(d);
>
> @@ -2849,6 +2851,7 @@ drm_compositor_create(struct wl_display *display,
>
> err_udev_monitor:
> wl_event_source_remove(ec->udev_drm_source);
> + ec->udev_drm_source = NULL;
> udev_monitor_unref(ec->udev_monitor);
> err_drm_source:
> wl_event_source_remove(ec->drm_source);
> diff --git a/src/compositor-rpi.c b/src/compositor-rpi.c
> index 287451d..cbfb770 100644
> --- a/src/compositor-rpi.c
> +++ b/src/compositor-rpi.c
> @@ -213,6 +213,7 @@ static void
> rpi_flippipe_release(struct rpi_flippipe *flippipe)
> {
> wl_event_source_remove(flippipe->source);
> + flippipe->source = NULL;
> close(flippipe->readfd);
> close(flippipe->writefd);
> }
> diff --git a/src/compositor-x11.c b/src/compositor-x11.c
> index 56b3228..9f171e7 100644
> --- a/src/compositor-x11.c
> +++ b/src/compositor-x11.c
> @@ -485,6 +485,7 @@ x11_output_destroy(struct weston_output *output_base)
> (struct x11_compositor *)output->base.compositor;
>
> wl_event_source_remove(output->finish_frame_timer);
> + output->finish_frame_timer = NULL;
>
> if (compositor->use_pixman) {
> pixman_renderer_output_destroy(output_base);
> @@ -1424,6 +1425,7 @@ x11_destroy(struct weston_compositor *ec)
> struct x11_compositor *compositor = (struct x11_compositor *)ec;
>
> wl_event_source_remove(compositor->xcb_source);
> + compositor->xcb_source = NULL;
> x11_input_destroy(compositor);
>
> weston_compositor_shutdown(ec); /* destroys outputs, too */
> diff --git a/src/compositor.c b/src/compositor.c
> index cd1ca9a..6ad3387 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -3736,8 +3736,12 @@ weston_compositor_shutdown(struct weston_compositor
> *ec)
> struct weston_output *output, *next;
>
> wl_event_source_remove(ec->idle_source);
> - if (ec->input_loop_source)
> + ec->idle_source = NULL;
> +
> + if (ec->input_loop_source) {
> wl_event_source_remove(ec->input_loop_source);
> + ec->input_loop_source = NULL;
> + }
>
> /* Destroy all outputs associated with this compositor */
> wl_list_for_each_safe(output, next, &ec->output_list, link)
> diff --git a/src/evdev-touchpad.c b/src/evdev-touchpad.c
> index 69f913a..360f87f 100644
> --- a/src/evdev-touchpad.c
> +++ b/src/evdev-touchpad.c
> @@ -663,6 +663,7 @@ touchpad_destroy(struct evdev_dispatch *dispatch)
>
> touchpad->filter->interface->destroy(touchpad->filter);
> wl_event_source_remove(touchpad->fsm.timer_source);
> + touchpad->fsm.timer_source = NULL;
> free(dispatch);
> }
>
> diff --git a/src/evdev.c b/src/evdev.c
> index 888dfbd..a1bce2c 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -697,8 +697,10 @@ evdev_device_destroy(struct evdev_device *device)
> if (dispatch)
> dispatch->interface->destroy(dispatch);
>
> - if (device->source)
>