[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