[Spice-devel] [PATCH] server/red_worker: don't release self_bitmap unless refcount is 0
Uri Lublin
uril at redhat.com
Mon May 14 02:41:58 PDT 2012
On 05/13/2012 02:40 PM, Alon Levy wrote:
> From: Yonit Halperin<yhalperi at redhat.com>
>
> RHBZ: 808936
> ---
> server/red_worker.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/server/red_worker.c b/server/red_worker.c
> index 473d0d6..60f30d3 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -1695,13 +1695,12 @@ static inline void put_red_drawable(RedWorker *worker, RedDrawable *drawable, ui
> {
> QXLReleaseInfoExt release_info_ext;
>
> - if (self_bitmap) {
> - red_put_image(self_bitmap);
> - }
> if (--drawable->refs) {
> return;
> }
> -
> + if (self_bitmap) {
> + red_put_image(self_bitmap);
> + }
> worker->red_drawable_count--;
> release_info_ext.group_id = group_id;
> release_info_ext.info = drawable->release_info;
That patch itself looks good, assuming "self_bitmap" must be alive when
"drawable" is alive.
A few comments/questions:
put_red_drawable is called from 3 places, one of which calls it with a
NULL self_bitmap.
Is it possible this call will be the last (and self_bitmap would leak) ?
Also it is not clear to me if self_bitmap is updated together with
drawable->refs.
For example in get_drawable self_bitmap is NULL, till we get an image from
the driver (in red_process_commands -> red_process_drawable ->
red_handle_self_bitmap).
I think it makes sense to get self_bitmap inside RedDrawable (can be in
a different patch).
It would clean the code a bit.
(So much text for such a simple patch)
Regards,
Uri.
More information about the Spice-devel
mailing list