summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohns <johns98@gmx.net>2012-01-24 10:02:39 +0100
committerJohns <johns98@gmx.net>2012-01-24 10:02:39 +0100
commit6ca4d3c44fe75d0ad475d214d55d73b9b4699cc4 (patch)
tree3aecd1a4c6c66c2cb552b460ffdc99d37cba42aa
parent2ac2eb39c633872b8bb5183854cef39722df4c90 (diff)
downloadvdr-plugin-softhddevice-6ca4d3c44fe75d0ad475d214d55d73b9b4699cc4.tar.gz
vdr-plugin-softhddevice-6ca4d3c44fe75d0ad475d214d55d73b9b4699cc4.tar.bz2
Fix dead-lock in VdpauExit.
-rw-r--r--ChangeLog1
-rw-r--r--video.c16
2 files changed, 12 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index a0ec3eb..5a171ec 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
User johns
Date:
+ Fix for dead-lock in VdpauExit.
Workaround for dead-lock in VdpauExit.
VDPAU: Add very primitive software scaler for grab image.
VA-API: Add auto-crop support.
diff --git a/video.c b/video.c
index 37e1ea0..dcf724c 100644
--- a/video.c
+++ b/video.c
@@ -3587,12 +3587,15 @@ static void VaapiSyncRenderFrame(VaapiDecoder * decoder,
VideoPollEvent();
+ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
+ pthread_testcancel();
// give osd some time slot
while (pthread_cond_timedwait(&VideoWakeupCond, &VideoLockMutex,
&abstime) != ETIMEDOUT) {
// SIGUSR1
Debug(3, "video/vaapi: pthread_cond_timedwait error\n");
}
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
VaapiSyncDisplayFrame(decoder);
}
@@ -6526,12 +6529,16 @@ static void VdpauSyncRenderFrame(VdpauDecoder * decoder,
VideoPollEvent();
+ // fix dead-lock with VdpauExit
+ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
+ pthread_testcancel();
// give osd some time slot
while (pthread_cond_timedwait(&VideoWakeupCond, &VideoLockMutex,
&abstime) != ETIMEDOUT) {
// SIGUSR1
Debug(3, "video/vdpau: pthread_cond_timedwait error\n");
}
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
VdpauSyncDisplayFrame(decoder);
}
@@ -7360,11 +7367,10 @@ static void *VideoDisplayHandlerThread(void *dummy)
#endif
for (;;) {
- /* other way to try to fix dead-lock with VdpauExit
- pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
- pthread_testcancel();
- pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
- */
+ // fix dead-lock with VdpauExit
+ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
+ pthread_testcancel();
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
VideoPollEvent();