[PATCH wayland] client: Check reference count only for destroyed proxies
Kristian Høgsberg
hoegsberg at gmail.com
Sun Mar 17 13:23:15 PDT 2013
On Thu, Mar 07, 2013 at 11:32:39PM +0100, Jonas Ådahl wrote:
> The llvm static analyzer tool reported "Use of memory after it is freed"
> in dispatch_event() because the proxy is used after being freed if the
> reference count reaches zero without the destroyed flag being set. This
> would never happen in practice because the owner of the proxy object
> always holds a reference until calling wl_proxy_destroy() which would
> also set the destroyed flag.
>
> Since this is the case, it is safe to do the reference count check only
> if the destroyed flag is set, as it can never reach zero if not.
>
> This commit doesn't change the behavior of the function, but makes the
> static analyzer more happy.
>
> Fixes https://bugs.freedesktop.org/show_bug.cgi?id=61385
Yes, looks fine, thanks.
Kristian
> Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
> ---
> src/wayland-client.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/src/wayland-client.c b/src/wayland-client.c
> index 74e4657..3ead2ac 100644
> --- a/src/wayland-client.c
> +++ b/src/wayland-client.c
> @@ -822,10 +822,10 @@ dispatch_event(struct wl_display *display, struct wl_event_queue *queue)
> proxy_destroyed = !!(proxy->flags & WL_PROXY_FLAG_DESTROYED);
>
> proxy->refcount--;
> - if (!proxy->refcount)
> - free(proxy);
> -
> if (proxy_destroyed) {
> + if (!proxy->refcount)
> + free(proxy);
> +
> wl_closure_destroy(closure);
> return;
> }
> --
> 1.7.10.4
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list