From: Pekka Paalanen Date: Fri, 14 Mar 2014 12:38:12 +0000 (+0200) Subject: compositor: buffer can be non-NULL only if newly_attached X-Git-Tag: 1.4.91~54 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;ds=sidebyside;h=260ba38fff92aa987a54945a238f2346736946d9;p=platform%2Fupstream%2Fweston.git compositor: buffer can be non-NULL only if newly_attached There is no need for weston_subsurface_commit_to_cache() to leave the pending.buffer set. Reset it to NULL. This makes pending.buffer always NULL if pending.newly_attached == 0. IOW, pending.buffer cannot be non-NULL unless pending.newly_attached == 1. Therefore no need to check pending.buffer nor cached.buffer_ref.buffer for the weston_surface_attach() calls. Signed-off-by: Pekka Paalanen --- diff --git a/src/compositor.c b/src/compositor.c index 5e70e9e..c8543a2 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -2006,13 +2006,15 @@ weston_surface_commit(struct weston_surface *surface) struct weston_view *view; pixman_region32_t opaque; + /* XXX: wl_viewport.set without an attach should call configure */ + /* wl_surface.set_buffer_transform */ /* wl_surface.set_buffer_scale */ /* wl_viewport.set */ surface->buffer_viewport = surface->pending.buffer_viewport; /* wl_surface.attach */ - if (surface->pending.buffer || surface->pending.newly_attached) + if (surface->pending.newly_attached) weston_surface_attach(surface, surface->pending.buffer); if (surface->configure && surface->pending.newly_attached) @@ -2236,7 +2238,7 @@ weston_subsurface_commit_from_cache(struct weston_subsurface *sub) surface->buffer_viewport = sub->cached.buffer_viewport; /* wl_surface.attach */ - if (sub->cached.buffer_ref.buffer || sub->cached.newly_attached) + if (sub->cached.newly_attached) weston_surface_attach(surface, sub->cached.buffer_ref.buffer); weston_buffer_reference(&sub->cached.buffer_ref, NULL); @@ -2314,6 +2316,10 @@ weston_subsurface_commit_to_cache(struct weston_subsurface *sub) } sub->cached.sx += surface->pending.sx; sub->cached.sy += surface->pending.sy; + + if (surface->pending.buffer) + wl_list_remove(&surface->pending.buffer_destroy_listener.link); + surface->pending.buffer = NULL; surface->pending.sx = 0; surface->pending.sy = 0; surface->pending.newly_attached = 0;