virgl: Fix pipe_resource leaks under multi-sample.
authorLepton Wu <lepton@chromium.org>
Tue, 10 Sep 2019 03:42:55 +0000 (03:42 +0000)
committerChia-I Wu <olvaffe@gmail.com>
Tue, 10 Sep 2019 03:42:55 +0000 (03:42 +0000)
Fixes: 900a80f9e4f ("virgl: virgl_transfer should own its virgl_resource")
Signed-off-by: Lepton Wu <lepton@chromium.org>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
src/gallium/drivers/virgl/virgl_texture.c

index 570f96fb14ca90fb6cdc19fc42449eee19addbbb..1b39c6382dc05a738c2cd8174946e09317c77acd 100644 (file)
@@ -169,6 +169,9 @@ static void *texture_transfer_map_resolve(struct pipe_context *ctx,
    if (!ptr)
       goto fail;
 
+   /* trans->resolve_transfer owns resolve_tmp now */
+   pipe_resource_reference(&resolve_tmp, NULL);
+
    *transfer = &trans->base;
    if (fmt == resource->format) {
       trans->base.stride = trans->resolve_transfer->stride;
@@ -283,7 +286,6 @@ static void virgl_texture_transfer_unmap(struct pipe_context *ctx,
    }
 
    if (trans->resolve_transfer) {
-      pipe_resource_reference(&trans->resolve_transfer->resource, NULL);
       virgl_resource_destroy_transfer(vctx,
                                       virgl_transfer(trans->resolve_transfer));
    }