compositor: inert wl_surface objects do not exist
There is no valid case, where you would actually destroy a weston_surface, while leaving the wl_surface protocol object in existence. Therefore, inert wl_surface objects do not exist, except because of bugs. To catch such bugs, check that the resource is really NULL before actually destroying the weston_surface. We actually used to have this check, but it was removed by: commit9dadfb5352
Author: Kristian Høgsberg <krh@bitplanet.net> Date: Mon Jul 8 13:49:36 2013 -0400 compositor: Eliminate marshalling warning for leave events However, the invariant was put back in: commit0d379744d3
Author: Giulio Camuffo <giuliocamuffo@gmail.com> Date: Fri Nov 15 22:06:15 2013 +0100 compositor: set weston_surface:resource to NULL when destroyed So apparently the issue fixed by9dadfb53
was fixed another way later. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
parent
e259a7a7d2
commit
08d3fb7625
@ -1874,6 +1874,8 @@ weston_surface_destroy(struct weston_surface *surface)
|
||||
if (--surface->ref_count > 0)
|
||||
return;
|
||||
|
||||
assert(surface->resource == NULL);
|
||||
|
||||
wl_signal_emit(&surface->destroy_signal, &surface->resource);
|
||||
|
||||
assert(wl_list_empty(&surface->subsurface_list_pending));
|
||||
@ -1903,6 +1905,8 @@ destroy_surface(struct wl_resource *resource)
|
||||
{
|
||||
struct weston_surface *surface = wl_resource_get_user_data(resource);
|
||||
|
||||
assert(surface);
|
||||
|
||||
/* Set the resource to NULL, since we don't want to leave a
|
||||
* dangling pointer if the surface was refcounted and survives
|
||||
* the weston_surface_destroy() call. */
|
||||
|
Loading…
Reference in New Issue
Block a user