[FFmpeg-cvslog] w32pthreads: Load dynamically loaded functions on demand

Hendrik Leppkes git at videolan.org
Sat Oct 10 09:46:09 CEST 2015


ffmpeg | branch: master | Hendrik Leppkes <h.leppkes at gmail.com> | Wed Oct  7 15:15:14 2015 +0200| [2830bce47e2eb29c76202f19017031ddc1f95dd3] | committer: Luca Barbato

w32pthreads: Load dynamically loaded functions on demand

This removes the requirement of calling w32thread_init before being
able to use the threading primitives.

Signed-off-by: Luca Barbato <lu_zero at gentoo.org>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2830bce47e2eb29c76202f19017031ddc1f95dd3
---

 compat/w32pthreads.h |   10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/compat/w32pthreads.h b/compat/w32pthreads.h
index a1cb396..ac9a814 100644
--- a/compat/w32pthreads.h
+++ b/compat/w32pthreads.h
@@ -160,6 +160,11 @@ static inline void pthread_cond_signal(pthread_cond_t *cond)
 }
 
 #else // _WIN32_WINNT < 0x0600
+
+/* atomic init state of dynamically loaded functions */
+static LONG w32thread_init_state = 0;
+static av_unused void w32thread_init(void);
+
 /* for pre-Windows 6.0 platforms, define INIT_ONCE struct,
  * compatible to the one used in the native API */
 
@@ -200,6 +205,8 @@ static inline void w32thread_once_fallback(LONG volatile *state, void (*init_rou
 
 static av_unused int pthread_once(pthread_once_t *once_control, void (*init_routine)(void))
 {
+    w32thread_once_fallback(&w32thread_init_state, w32thread_init);
+
     /* Use native functions on Windows 6.0+ */
     if (initonce_begin && initonce_complete) {
         BOOL pending = FALSE;
@@ -236,6 +243,9 @@ static BOOL (WINAPI *cond_wait)(pthread_cond_t *cond, pthread_mutex_t *mutex,
 static av_unused void pthread_cond_init(pthread_cond_t *cond, const void *unused_attr)
 {
     win32_cond_t *win32_cond = NULL;
+
+    w32thread_once_fallback(&w32thread_init_state, w32thread_init);
+
     if (cond_init) {
         cond_init(cond);
         return;



More information about the ffmpeg-cvslog mailing list