From be50cf5ba79d4e1203b87d9b32e7b921d1bc4854 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Thu, 16 Aug 2007 19:21:41 +0000 Subject: [PATCH] Hide thread ID out of VLC_COMMON_MEMBERS --- include/vlc_common.h | 4 -- src/libvlc-common.c | 1 - src/libvlc.h | 6 ++- src/misc/objects.c | 5 ++- src/misc/threads.c | 65 +++++++++++++++++---------------- src/misc/update.c | 2 +- src/video_output/video_output.c | 2 +- 7 files changed, 44 insertions(+), 41 deletions(-) diff --git a/include/vlc_common.h b/include/vlc_common.h index 40bc4cb668..502bd08b85 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -547,10 +547,6 @@ typedef struct vlc_object_internals_t vlc_object_internals_t; char *psz_header; \ int i_flags; \ \ - /* Thread properties, if any */ \ - vlc_bool_t b_thread; \ - vlc_thread_t thread_id; \ - \ /* Object access lock */ \ vlc_mutex_t object_lock; \ vlc_cond_t object_wait; \ diff --git a/src/libvlc-common.c b/src/libvlc-common.c index 1c70a8f92e..15e789e593 100644 --- a/src/libvlc-common.c +++ b/src/libvlc-common.c @@ -193,7 +193,6 @@ libvlc_int_t * libvlc_InternalCreate( void ) i_instances--; return NULL; } - p_libvlc->thread_id = 0; p_libvlc->p_playlist = NULL; p_libvlc->psz_object_name = "libvlc"; diff --git a/src/libvlc.h b/src/libvlc.h index edaa86c747..e7a9265782 100644 --- a/src/libvlc.h +++ b/src/libvlc.h @@ -83,9 +83,13 @@ uint32_t CPUCapabilities( void ); struct vlc_object_internals_t { /* Object variables */ + variable_t * p_vars; vlc_mutex_t var_lock; int i_vars; - variable_t * p_vars; + + /* Thread properties, if any */ + vlc_thread_t thread_id; + vlc_bool_t b_thread; }; diff --git a/src/misc/objects.c b/src/misc/objects.c index 27e39c326b..eb22972093 100644 --- a/src/misc/objects.c +++ b/src/misc/objects.c @@ -1207,8 +1207,9 @@ static void PrintObject( vlc_object_t *p_this, const char *psz_prefix ) snprintf( psz_refcount, 19, ", refcount %i", p_this->i_refcount ); psz_thread[0] = '\0'; - if( p_this->b_thread ) - snprintf( psz_thread, 29, " (thread %d)", (int)p_this->thread_id ); + if( p_this->p_internals->b_thread ) + snprintf( psz_thread, 29, " (thread %u)", + (unsigned)p_this->p_internals->thread_id ); psz_parent[0] = '\0'; if( p_this->p_parent ) diff --git a/src/misc/threads.c b/src/misc/threads.c index 3b0e054813..bacbdac70f 100644 --- a/src/misc/threads.c +++ b/src/misc/threads.c @@ -564,15 +564,16 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line { int i_ret; void *p_data = (void *)p_this; + vlc_object_internals_t *p_priv = p_this->p_internals; vlc_mutex_lock( &p_this->object_lock ); #if defined( PTH_INIT_IN_PTH_H ) - p_this->thread_id = pth_spawn( PTH_ATTR_DEFAULT, func, p_data ); - i_ret = p_this->thread_id == NULL; + p_priv->thread_id = pth_spawn( PTH_ATTR_DEFAULT, func, p_data ); + i_ret = p_priv->thread_id == NULL; #elif defined( ST_INIT_IN_ST_H ) - p_this->thread_id = st_thread_create( func, p_data, 1, 0 ); + p_priv->thread_id = st_thread_create( func, p_data, 1, 0 ); i_ret = 0; #elif defined( WIN32 ) || defined( UNDER_CE ) @@ -582,7 +583,7 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line * function instead of CreateThread, otherwise you'll end up with * memory leaks and the signal functions not working (see Microsoft * Knowledge Base, article 104641) */ - p_this->thread_id = + p_priv->thread_id = #if defined( UNDER_CE ) (HANDLE)CreateThread( NULL, 0, (PTHREAD_START) func, p_data, 0, &threadID ); @@ -592,24 +593,24 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line #endif } - if( p_this->thread_id && i_priority ) + if( p_priv->thread_id && i_priority ) { - if( !SetThreadPriority(p_this->thread_id, i_priority) ) + if( !SetThreadPriority(p_priv->thread_id, i_priority) ) { msg_Warn( p_this, "couldn't set a faster priority" ); i_priority = 0; } } - i_ret = ( p_this->thread_id ? 0 : 1 ); + i_ret = ( p_priv->thread_id ? 0 : 1 ); #elif defined( HAVE_KERNEL_SCHEDULER_H ) - p_this->thread_id = spawn_thread( (thread_func)func, psz_name, + p_priv->thread_id = spawn_thread( (thread_func)func, psz_name, i_priority, p_data ); - i_ret = resume_thread( p_this->thread_id ); + i_ret = resume_thread( p_priv->thread_id ); #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) - i_ret = pthread_create( &p_this->thread_id, NULL, func, p_data ); + i_ret = pthread_create( &p_priv->thread_id, NULL, func, p_data ); #ifndef __APPLE__ if( config_GetInt( p_this, "rt-priority" ) ) @@ -633,7 +634,7 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line param.sched_priority = i_priority; i_policy = SCHED_RR; } - if( (i_error = pthread_setschedparam( p_this->thread_id, + if( (i_error = pthread_setschedparam( p_priv->thread_id, i_policy, ¶m )) ) { msg_Warn( p_this, "couldn't set thread priority (%s:%d): %s", @@ -649,7 +650,7 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line #endif #elif defined( HAVE_CTHREADS_H ) - p_this->thread_id = cthread_fork( (cthread_fn_t)func, (any_t)p_data ); + p_priv->thread_id = cthread_fork( (cthread_fn_t)func, (any_t)p_data ); i_ret = 0; #endif @@ -662,10 +663,10 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line vlc_cond_wait( &p_this->object_wait, &p_this->object_lock ); } - p_this->b_thread = VLC_TRUE; + p_priv->b_thread = VLC_TRUE; msg_Dbg( p_this, "thread %u (%s) created at priority %d (%s:%d)", - (unsigned int)p_this->thread_id, psz_name, i_priority, + (unsigned int)p_priv->thread_id, psz_name, i_priority, psz_file, i_line ); vlc_mutex_unlock( &p_this->object_lock ); @@ -696,9 +697,10 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file, } #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) -#ifndef __APPLE__ - if( config_GetInt( p_this, "rt-priority" ) ) -#endif + vlc_object_internals_t *p_priv = p_this->p_internals; +# ifndef __APPLE__ + if( config_GetInt( p_this, "rt-priority" ) > 0 ) +# endif { int i_error, i_policy; struct sched_param param; @@ -718,9 +720,9 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file, param.sched_priority = i_priority; i_policy = SCHED_RR; } - if( !p_this->thread_id ) - p_this->thread_id = pthread_self(); - if( (i_error = pthread_setschedparam( p_this->thread_id, + if( !p_priv->thread_id ) + p_priv->thread_id = pthread_self(); + if( (i_error = pthread_setschedparam( p_priv->thread_id, i_policy, ¶m )) ) { msg_Warn( p_this, "couldn't set thread priority (%s:%d): %s", @@ -748,13 +750,14 @@ void __vlc_thread_ready( vlc_object_t *p_this ) *****************************************************************************/ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line ) { + vlc_object_internals_t *p_priv = p_this->p_internals; int i_ret = 0; #if defined( PTH_INIT_IN_PTH_H ) - i_ret = ( pth_join( p_this->thread_id, NULL ) == FALSE ); + i_ret = ( pth_join( p_priv->thread_id, NULL ) == FALSE ); #elif defined( ST_INIT_IN_ST_H ) - i_ret = st_thread_join( p_this->thread_id, NULL ); + i_ret = st_thread_join( p_priv->thread_id, NULL ); #elif defined( UNDER_CE ) || defined( WIN32 ) HMODULE hmodule; @@ -763,7 +766,7 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line FILETIME create_ft, exit_ft, kernel_ft, user_ft; int64_t real_time, kernel_time, user_time; - WaitForSingleObject( p_this->thread_id, INFINITE ); + WaitForSingleObject( p_priv->thread_id, INFINITE ); #if defined( UNDER_CE ) hmodule = GetModuleHandle( _T("COREDLL") ); @@ -775,7 +778,7 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line GetProcAddress( hmodule, _T("GetThreadTimes") ); if( OurGetThreadTimes && - OurGetThreadTimes( p_this->thread_id, + OurGetThreadTimes( p_priv->thread_id, &create_ft, &exit_ft, &kernel_ft, &user_ft ) ) { real_time = @@ -800,17 +803,17 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line user_time/60/1000000, (double)((user_time%(60*1000000))/1000000.0) ); } - CloseHandle( p_this->thread_id ); + CloseHandle( p_priv->thread_id ); #elif defined( HAVE_KERNEL_SCHEDULER_H ) int32_t exit_value; - wait_for_thread( p_this->thread_id, &exit_value ); + wait_for_thread( p_priv->thread_id, &exit_value ); #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) - i_ret = pthread_join( p_this->thread_id, NULL ); + i_ret = pthread_join( p_priv->thread_id, NULL ); #elif defined( HAVE_CTHREADS_H ) - cthread_join( p_this->thread_id ); + cthread_join( p_priv->thread_id ); i_ret = 1; #endif @@ -818,15 +821,15 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line if( i_ret ) { msg_Err( p_this, "thread_join(%u) failed at %s:%d (%s)", - (unsigned int)p_this->thread_id, psz_file, i_line, + (unsigned int)p_priv->thread_id, psz_file, i_line, strerror(i_ret) ); } else { msg_Dbg( p_this, "thread %u joined (%s:%d)", - (unsigned int)p_this->thread_id, psz_file, i_line ); + (unsigned int)p_priv->thread_id, psz_file, i_line ); } - p_this->b_thread = VLC_FALSE; + p_priv->b_thread = VLC_FALSE; } diff --git a/src/misc/update.c b/src/misc/update.c index a8756f4935..d2891494b5 100644 --- a/src/misc/update.c +++ b/src/misc/update.c @@ -1338,7 +1338,7 @@ void update_download_for_real( download_thread_t *p_this ) free( p_this->psz_status ); #ifdef WIN32 - CloseHandle( p_this->thread_id ); + CloseHandle( p_this->p_internals->thread_id ); #endif vlc_object_destroy( p_this ); diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index 4ebc7a341a..b100397120 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -1449,7 +1449,7 @@ static void SuxorRestartVideoES( suxor_thread_t *p_this ) vlc_object_release( p_this->p_input ); #ifdef WIN32 - CloseHandle( p_this->thread_id ); + CloseHandle( p_this->p_internals->thread_id ); #endif vlc_object_destroy( p_this ); -- 2.39.2