aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/vdpau/bitmap.c
diff options
context:
space:
mode:
authorChristian König <[email protected]>2014-08-13 15:49:18 +0200
committerChristian König <[email protected]>2014-08-14 11:57:07 +0200
commit6fb42ee7a632e181160ac4be234b30e50a1b91d5 (patch)
tree962b6f4da56cdc0d8791f65177a4ce111dc0a966 /src/gallium/state_trackers/vdpau/bitmap.c
parentc1df492d03862f75698ba5d50d4f46cd528ffc0d (diff)
st/vdpau: add device reference counting
This fixes an issue with flash where it tries to destroy a decoder after already destroying the device associated with the decoder. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=82517 Signed-off-by: Christian König <[email protected]> Acked-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers/vdpau/bitmap.c')
-rw-r--r--src/gallium/state_trackers/vdpau/bitmap.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/vdpau/bitmap.c b/src/gallium/state_trackers/vdpau/bitmap.c
index a06892132e9..97a428727a5 100644
--- a/src/gallium/state_trackers/vdpau/bitmap.c
+++ b/src/gallium/state_trackers/vdpau/bitmap.c
@@ -67,7 +67,7 @@ vlVdpBitmapSurfaceCreate(VdpDevice device,
if (!vlsurface)
return VDP_STATUS_RESOURCES;
- vlsurface->device = dev;
+ DeviceReference(&vlsurface->device, dev);
memset(&res_tmpl, 0, sizeof(res_tmpl));
res_tmpl.target = PIPE_TEXTURE_2D;
@@ -117,6 +117,7 @@ err_sampler:
pipe_sampler_view_reference(&vlsurface->sampler_view, NULL);
err_unlock:
pipe_mutex_unlock(dev->mutex);
+ DeviceReference(&vlsurface->device, NULL);
FREE(vlsurface);
return ret;
}
@@ -138,6 +139,7 @@ vlVdpBitmapSurfaceDestroy(VdpBitmapSurface surface)
pipe_mutex_unlock(vlsurface->device->mutex);
vlRemoveDataHTAB(surface);
+ DeviceReference(&vlsurface->device, NULL);
FREE(vlsurface);
return VDP_STATUS_OK;