summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReinhard Nißl <rnissl@gmx.de>2011-01-25 20:27:29 +0100
committerReinhard Nißl <rnissl@gmx.de>2011-01-25 20:27:29 +0100
commit288db091c2737e68e89dad391b9880e55df7f7d3 (patch)
tree12ddaff20b9e462d1a6de07e4d05dfe8bee08eed
parent43fbcb6029f9a0f63ee8b61f63e54d74fc79de2a (diff)
downloadxine-lib-288db091c2737e68e89dad391b9880e55df7f7d3.tar.gz
xine-lib-288db091c2737e68e89dad391b9880e55df7f7d3.tar.bz2
Prevent deadlock caused by guarded_vdp_output_surface_destroy()
guarded_vdp_output_surface_destroy() calls XLockDisplay() and XUnlockDisplay() always and not depending on define LOCKDISPLAY. This may cause a deadlock among threads using VDPAU API due to different resource allocation orders when guarding is not used (i. e. #undef LOCKDISPLAY is enabled). --HG-- extra : rebase_source : abafc9604d8cfb6efe07f665361c4e01e60adc37
-rw-r--r--src/video_out/video_out_vdpau.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/video_out/video_out_vdpau.c b/src/video_out/video_out_vdpau.c
index 148aad732..4348aaa0a 100644
--- a/src/video_out/video_out_vdpau.c
+++ b/src/video_out/video_out_vdpau.c
@@ -230,9 +230,13 @@ static VdpStatus guarded_vdp_output_surface_create(VdpDevice device, VdpChromaTy
static VdpStatus guarded_vdp_output_surface_destroy(VdpVideoSurface surface)
{
VdpStatus r;
+#ifdef LOCKDISPLAY
XLockDisplay(guarded_display);
+#endif
r = orig_vdp_output_surface_destroy(surface);
+#ifdef LOCKDISPLAY
XUnlockDisplay(guarded_display);
+#endif
return r;
}