[VDPAU] [PATCH 2/4] vdpau_wrapper: make the fixes initialization thread-safe

Rémi Denis-Courmont remi at remlab.net
Wed Oct 29 05:47:00 PDT 2014


From: Rémi Denis-Courmont <remid at nvidia.com>

---
 src/Makefile.am     |  1 +
 src/vdpau_wrapper.c | 10 +++-------
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 2e8e868..0ce8460 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -21,6 +21,7 @@ endif
 
 libvdpau_la_LIBADD = \
     $(DLOPEN_LIBS) \
+    $(PTHREAD_LIBS) \
     $(XEXT_LIBS)
 
 libvdpau_la_LDFLAGS = -version-info 1:0:0 -no-undefined
diff --git a/src/vdpau_wrapper.c b/src/vdpau_wrapper.c
index c6ab2ca..0360d4d 100644
--- a/src/vdpau_wrapper.c
+++ b/src/vdpau_wrapper.c
@@ -27,6 +27,7 @@
 
 #include <dlfcn.h>
 #include <limits.h>
+#include <pthread.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -240,7 +241,6 @@ static VdpVideoSurfacePutBitsYCbCr * _imp_vid_put_bits_y_cb_cr;
 static VdpDecoderQueryCapabilities * _imp_decoder_query_capabilities;
 static VdpDecoderCreate * _imp_decoder_create;
 static VdpPresentationQueueSetBackgroundColor * _imp_pq_set_bg_color;
-static int _inited_fixes;
 static int _running_under_flash;
 static int _enable_flash_uv_swap = 1;
 static int _disable_flash_pq_bg_color = 1;
@@ -512,11 +512,6 @@ static void init_config(void)
 
 static void init_fixes(void)
 {
-    if (_inited_fixes) {
-        return;
-    }
-    _inited_fixes = 1;
-
     init_running_under_flash();
     init_config();
 }
@@ -529,9 +524,10 @@ VdpStatus vdp_device_create_x11(
     VdpGetProcAddress * * get_proc_address
 )
 {
+    static pthread_once_t once = PTHREAD_ONCE_INIT;
     VdpStatus status;
 
-    init_fixes();
+    pthread_once(&once, init_fixes);
 
     if (!_vdp_imp_device_create_x11_proc) {
         status = _vdp_open_driver(display, screen);
-- 
1.9.1



More information about the VDPAU mailing list