From: RĂ©mi Denis-Courmont Date: Sat, 11 Apr 2009 17:10:14 +0000 (+0300) Subject: Deinline vlc_threadvar_(|s)get and kill useless indirection X-Git-Tag: 1.0.0-pre2~108 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=31196681e079413f491febb8eabf996f4e2b445a;p=vlc Deinline vlc_threadvar_(|s)get and kill useless indirection I wonder if we should unexport threadvar functions? In any case, they are not used from outside libvlccore at the moment. --- diff --git a/include/vlc_threads.h b/include/vlc_threads.h index 6a6bacada2..71a8dbec5f 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -153,6 +153,8 @@ VLC_EXPORT( void, vlc_cond_wait, (vlc_cond_t *, vlc_mutex_t *) ); VLC_EXPORT( int, vlc_cond_timedwait, (vlc_cond_t *, vlc_mutex_t *, mtime_t) ); VLC_EXPORT( int, vlc_threadvar_create, (vlc_threadvar_t * , void (*) (void *) ) ); VLC_EXPORT( void, vlc_threadvar_delete, (vlc_threadvar_t *) ); +VLC_EXPORT( int, vlc_threadvar_set, (vlc_threadvar_t, void *) ); +VLC_EXPORT( void *, vlc_threadvar_get, (vlc_threadvar_t) ); VLC_EXPORT( int, vlc_thread_create, ( vlc_object_t *, const char *, int, const char *, void * ( * ) ( vlc_object_t * ), int ) ); VLC_EXPORT( int, __vlc_thread_set_priority, ( vlc_object_t *, const char *, int, int ) ); VLC_EXPORT( void, __vlc_thread_join, ( vlc_object_t * ) ); @@ -234,42 +236,6 @@ static inline void vlc_cleanup_lock (void *lock) } #define mutex_cleanup_push( lock ) vlc_cleanup_push (vlc_cleanup_lock, lock) -/***************************************************************************** - * vlc_threadvar_set: create: set the value of a thread-local variable - *****************************************************************************/ -static inline int vlc_threadvar_set( vlc_threadvar_t * p_tls, void *p_value ) -{ - int i_ret; - -#if defined(LIBVLC_USE_PTHREAD) - i_ret = pthread_setspecific( *p_tls, p_value ); - -#elif defined( UNDER_CE ) || defined( WIN32 ) - i_ret = TlsSetValue( *p_tls, p_value ) ? EINVAL : 0; - -#endif - - return i_ret; -} - -/***************************************************************************** - * vlc_threadvar_get: create: get the value of a thread-local variable - *****************************************************************************/ -static inline void* vlc_threadvar_get( vlc_threadvar_t * p_tls ) -{ - void *p_ret; - -#if defined(LIBVLC_USE_PTHREAD) - p_ret = pthread_getspecific( *p_tls ); - -#elif defined( UNDER_CE ) || defined( WIN32 ) - p_ret = TlsGetValue( *p_tls ); - -#endif - - return p_ret; -} - # if defined (_POSIX_SPIN_LOCKS) && ((_POSIX_SPIN_LOCKS - 0) > 0) typedef pthread_spinlock_t vlc_spinlock_t; diff --git a/src/libvlccore.sym b/src/libvlccore.sym index cb6c85bab9..3e04bb6e65 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -491,6 +491,8 @@ __vlc_thread_join __vlc_thread_set_priority vlc_threadvar_create vlc_threadvar_delete +vlc_threadvar_get +vlc_threadvar_set vlc_ureduce VLC_Version vlc_wclosedir diff --git a/src/misc/messages.c b/src/misc/messages.c index 190ec7d43c..a453bccd54 100644 --- a/src/misc/messages.c +++ b/src/misc/messages.c @@ -599,14 +599,14 @@ static void PrintMsg ( vlc_object_t * p_this, msg_item_t * p_item ) static msg_context_t* GetContext(void) { - msg_context_t *p_ctx = vlc_threadvar_get( &msg_context ); + msg_context_t *p_ctx = vlc_threadvar_get( msg_context ); if( p_ctx == NULL ) { p_ctx = malloc( sizeof( msg_context_t ) ); if( !p_ctx ) return NULL; p_ctx->psz_message = NULL; - vlc_threadvar_set( &msg_context, p_ctx ); + vlc_threadvar_set( msg_context, p_ctx ); } return p_ctx; } diff --git a/src/misc/threads.c b/src/misc/threads.c index 1b2f25eefa..75aed7077c 100644 --- a/src/misc/threads.c +++ b/src/misc/threads.c @@ -170,7 +170,7 @@ static void CALLBACK vlc_cancel_self (ULONG_PTR dummy); static DWORD vlc_cancelable_wait (DWORD count, const HANDLE *handles, DWORD delay) { - vlc_cancel_t *nfo = vlc_threadvar_get (&cancel_key); + vlc_cancel_t *nfo = vlc_threadvar_get (cancel_key); if (nfo == NULL) { /* Main thread - cannot be cancelled anyway */ @@ -674,6 +674,40 @@ void vlc_threadvar_delete (vlc_threadvar_t *p_tls) #endif } +/** + * Sets a thread-local variable. + * @param key thread-local variable key (created with vlc_threadvar_create()) + * @param value new value for the variable for the calling thread + * @return 0 on success, a system error code otherwise. + */ +int vlc_threadvar_set (vlc_threadvar_t key, void *value) +{ +#if defined(LIBVLC_USE_PTHREAD) + return pthread_setspecific (key, value); +#elif defined( UNDER_CE ) || defined( WIN32 ) + return TlsSetValue (key, p_value) ? ENOMEM : 0; +#else +# error Unimplemented! +#endif +} + +/** + * Gets the value of a thread-local variable for the calling thread. + * This function cannot fail. + * @return the value associated with the given variable for the calling + * or NULL if there is no value. + */ +void *vlc_threadvar_get (vlc_threadvar_t key) +{ +#if defined(LIBVLC_USE_PTHREAD) + return pthread_getspecific (key); +#elif defined( UNDER_CE ) || defined( WIN32 ) + return TlsGetValue (key); +#else +# error Unimplemented! +#endif +} + #if defined (LIBVLC_USE_PTHREAD) #elif defined (WIN32) static unsigned __stdcall vlc_entry (void *data) @@ -684,7 +718,7 @@ static unsigned __stdcall vlc_entry (void *data) cancel_data.cancel_event = self->cancel_event; #endif - vlc_threadvar_set (&cancel_key, &cancel_data); + vlc_threadvar_set (cancel_key, &cancel_data); self->data = self->entry (self->data); return 0; } @@ -904,7 +938,7 @@ int vlc_savecancel (void) VLC_THREAD_ASSERT ("saving cancellation"); #else - vlc_cancel_t *nfo = vlc_threadvar_get (&cancel_key); + vlc_cancel_t *nfo = vlc_threadvar_get (cancel_key); if (nfo == NULL) return false; /* Main thread - cannot be cancelled anyway */ @@ -938,7 +972,7 @@ void vlc_restorecancel (int state) # endif #else - vlc_cancel_t *nfo = vlc_threadvar_get (&cancel_key); + vlc_cancel_t *nfo = vlc_threadvar_get (cancel_key); assert (state == false || state == true); if (nfo == NULL) @@ -963,7 +997,7 @@ void vlc_testcancel (void) pthread_testcancel (); #else - vlc_cancel_t *nfo = vlc_threadvar_get (&cancel_key); + vlc_cancel_t *nfo = vlc_threadvar_get (cancel_key); if (nfo == NULL) return; /* Main thread - cannot be cancelled anyway */ @@ -1199,7 +1233,7 @@ void vlc_control_cancel (int cmd, ...) #else va_list ap; - vlc_cancel_t *nfo = vlc_threadvar_get (&cancel_key); + vlc_cancel_t *nfo = vlc_threadvar_get (cancel_key); if (nfo == NULL) { #ifdef WIN32 @@ -1210,7 +1244,7 @@ void vlc_control_cancel (int cmd, ...) if (nfo == NULL) return; /* Uho! Expect problems! */ *nfo = VLC_CANCEL_INIT; - vlc_threadvar_set (&cancel_key, nfo); + vlc_threadvar_set (cancel_key, nfo); #endif }