On Thu, Apr 21, 2016 at 05:12:47PM +0300, Pekka Paalanen wrote: > From: Pekka Paalanen <[email protected]> > > When a test destroys a wl_surface, it is still possible to get events > referring to the destroyed surface. The surface in such cases will be > NULL. > > Handle NULL surface gracefully in keyboard and pointer enter/leave > handlers. Touch-down handler is already NULL-safe. > > This fixes a SEGV in a test I am writing for wp_viewport. > > Signed-off-by: Pekka Paalanen <[email protected]>
LGTM, Reviewed-by: Bryce Harrington <[email protected]> > --- > tests/weston-test-client-helper.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/tests/weston-test-client-helper.c > b/tests/weston-test-client-helper.c > index 3f7ff2b..cc2544e 100644 > --- a/tests/weston-test-client-helper.c > +++ b/tests/weston-test-client-helper.c > @@ -132,7 +132,11 @@ pointer_handle_enter(void *data, struct wl_pointer > *wl_pointer, > { > struct pointer *pointer = data; > > - pointer->focus = wl_surface_get_user_data(wl_surface); > + if (wl_surface) > + pointer->focus = wl_surface_get_user_data(wl_surface); > + else > + pointer->focus = NULL; > + > pointer->x = wl_fixed_to_int(x); > pointer->y = wl_fixed_to_int(y); > > @@ -149,7 +153,7 @@ pointer_handle_leave(void *data, struct wl_pointer > *wl_pointer, > pointer->focus = NULL; > > fprintf(stderr, "test-client: got pointer leave, surface %p\n", > - wl_surface_get_user_data(wl_surface)); > + wl_surface ? wl_surface_get_user_data(wl_surface) : NULL); > } > > static void > @@ -243,7 +247,10 @@ keyboard_handle_enter(void *data, struct wl_keyboard > *wl_keyboard, > { > struct keyboard *keyboard = data; > > - keyboard->focus = wl_surface_get_user_data(wl_surface); > + if (wl_surface) > + keyboard->focus = wl_surface_get_user_data(wl_surface); > + else > + keyboard->focus = NULL; > > fprintf(stderr, "test-client: got keyboard enter, surface %p\n", > keyboard->focus); > @@ -258,7 +265,7 @@ keyboard_handle_leave(void *data, struct wl_keyboard > *wl_keyboard, > keyboard->focus = NULL; > > fprintf(stderr, "test-client: got keyboard leave, surface %p\n", > - wl_surface_get_user_data(wl_surface)); > + wl_surface ? wl_surface_get_user_data(wl_surface) : NULL); > } > > static void > -- > 2.7.3 > > _______________________________________________ > wayland-devel mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
