From 63baa1df69663f280e010d58e5fdc5f740e3a4c0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Wed, 23 Apr 2008 21:33:45 +0300 Subject: [PATCH 1/1] Win32: don't use weak linking for SignalObjectAndWait --- include/vlc_threads.h | 1 - include/vlc_threads_funcs.h | 16 ++++------------ src/misc/threads.c | 37 ++----------------------------------- 3 files changed, 6 insertions(+), 48 deletions(-) diff --git a/include/vlc_threads.h b/include/vlc_threads.h index e35ce88093..4b695f7ce3 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -140,7 +140,6 @@ typedef struct volatile int i_waiting_threads; /* WinNT/2K/XP implementation */ HANDLE event; - SIGNALOBJECTANDWAIT SignalObjectAndWait; /* Win95/98/ME implementation */ HANDLE semaphore; CRITICAL_SECTION csection; diff --git a/include/vlc_threads_funcs.h b/include/vlc_threads_funcs.h index 199282621c..adadb033e3 100644 --- a/include/vlc_threads_funcs.h +++ b/include/vlc_threads_funcs.h @@ -282,12 +282,8 @@ static inline void __vlc_cond_wait( const char * psz_file, int i_line, if( p_mutex->mutex ) { - /* It is only possible to atomically release the mutex and - * initiate the waiting on WinNT/2K/XP. Win9x doesn't have - * SignalObjectAndWait(). */ - p_condvar->SignalObjectAndWait( p_mutex->mutex, - p_condvar->event, - INFINITE, FALSE ); + SignalObjectAndWait( p_mutex->mutex, p_condvar->event, + INFINITE, FALSE ); } else { @@ -414,12 +410,8 @@ static inline int __vlc_cond_timedwait( const char * psz_file, int i_line, if( p_mutex->mutex ) { - /* It is only possible to atomically release the mutex and - * initiate the waiting on WinNT/2K/XP. Win9x doesn't have - * SignalObjectAndWait(). */ - result = p_condvar->SignalObjectAndWait( p_mutex->mutex, - p_condvar->event, - delay_ms, FALSE ); + result = SignalObjectAndWait( p_mutex->mutex, p_condvar->event, + delay_ms, FALSE ); } else { diff --git a/src/misc/threads.c b/src/misc/threads.c index b634b64005..f535232c30 100644 --- a/src/misc/threads.c +++ b/src/misc/threads.c @@ -51,9 +51,6 @@ static vlc_object_t *p_root; #if defined( UNDER_CE ) #elif defined( WIN32 ) -/* following is only available on NT/2000/XP and above */ -static SIGNALOBJECTANDWAIT pf_SignalObjectAndWait = NULL; - /* ** On Windows NT/2K/XP we use a slow mutex implementation but which ** allows us to correctly implement condition variables. @@ -164,29 +161,6 @@ int __vlc_threads_init( vlc_object_t *p_this ) /* We should be safe now. Do all the initialization stuff we want. */ p_libvlc_global->b_ready = false; -#if defined( UNDER_CE ) - /* Nothing to initialize */ - -#elif defined( WIN32 ) - /* Dynamically get the address of SignalObjectAndWait */ - if( GetVersion() < 0x80000000 ) - { - HINSTANCE hInstLib; - - /* We are running on NT/2K/XP, we can use SignalObjectAndWait */ - hInstLib = LoadLibrary(_T("kernel32")); - if( hInstLib ) - { - pf_SignalObjectAndWait = - (SIGNALOBJECTANDWAIT)GetProcAddress( hInstLib, - _T("SignalObjectAndWait") ); - } - } - -#elif defined( HAVE_KERNEL_SCHEDULER_H ) -#elif defined( LIBVLC_USE_PTHREAD ) -#endif - p_root = vlc_custom_create( VLC_OBJECT(p_libvlc_global), 0, VLC_OBJECT_GLOBAL, "global" ); if( p_root == NULL ) @@ -279,13 +253,8 @@ int __vlc_mutex_init( vlc_mutex_t *p_mutex ) return 0; #elif defined( WIN32 ) - /* We use mutexes on WinNT/2K/XP because we can use the SignalObjectAndWait - * function and have a 100% correct vlc_cond_wait() implementation. - * As this function is not available on Win9x, we can use the faster - * CriticalSections */ - if( pf_SignalObjectAndWait && !b_fast_mutex ) + if( !b_fast_mutex ) { - /* We are running on NT/2K/XP, we can use SignalObjectAndWait */ p_mutex->mutex = CreateMutex( 0, FALSE, 0 ); return ( p_mutex->mutex != NULL ? 0 : 1 ); } @@ -426,10 +395,8 @@ int __vlc_cond_init( vlc_cond_t *p_condvar ) /* Misc init */ p_condvar->i_win9x_cv = i_win9x_cv; - p_condvar->SignalObjectAndWait = pf_SignalObjectAndWait; - if( (p_condvar->SignalObjectAndWait && !b_fast_mutex) - || p_condvar->i_win9x_cv == 0 ) + if( !b_fast_mutex || p_condvar->i_win9x_cv == 0 ) { /* Create an auto-reset event. */ p_condvar->event = CreateEvent( NULL, /* no security */ -- 2.39.5