X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmisc%2Fthreads.c;h=2405bdb3720ab654f2cbd9c8d31823c4dca07fbf;hb=1d5a0a9ca664284d3b5981dffbf0a60e2f6a88f7;hp=72e7473b341f1f0d8340097b84553d43bd4180e9;hpb=1fe2080044a8757e464c856a8b592af3765a1a05;p=vlc diff --git a/src/misc/threads.c b/src/misc/threads.c index 72e7473b34..2405bdb372 100644 --- a/src/misc/threads.c +++ b/src/misc/threads.c @@ -549,34 +549,30 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line pthread_attr_destroy (&attr); #elif defined( WIN32 ) || defined( UNDER_CE ) - { - /* When using the MSVCRT C library you have to use the _beginthreadex - * function instead of CreateThread, otherwise you'll end up with - * memory leaks and the signal functions not working (see Microsoft - * Knowledge Base, article 104641) */ + /* When using the MSVCRT C library you have to use the _beginthreadex + * function instead of CreateThread, otherwise you'll end up with + * memory leaks and the signal functions not working (see Microsoft + * Knowledge Base, article 104641) */ #if defined( UNDER_CE ) - HANDLE hThread = CreateThread( NULL, 0, thread_entry, - (LPVOID)boot, CREATE_SUSPENDED, - NULL ); + HANDLE hThread = CreateThread( NULL, 0, thread_entry, + (LPVOID)boot, CREATE_SUSPENDED, NULL ); #else - HANDLE hThread = (HANDLE)(uintptr_t) - _beginthreadex( NULL, 0, thread_entry, boot, - CREATE_SUSPENDED, NULL ); + HANDLE hThread = (HANDLE)(uintptr_t) + _beginthreadex( NULL, 0, thread_entry, boot, CREATE_SUSPENDED, NULL ); #endif - p_priv->thread_id = hThread; - ResumeThread(hThread); - } - - i_ret = ( p_priv->thread_id ? 0 : errno ); - - if( !i_ret && i_priority ) + if( hThread ) { - if( !SetThreadPriority(p_priv->thread_id, i_priority) ) + p_priv->thread_id = hThread; + ResumeThread (hThread); + i_ret = 0; + if( i_priority && !SetThreadPriority (hThread, i_priority) ) { msg_Warn( p_this, "couldn't set a faster priority" ); i_priority = 0; } } + else + i_ret = errno; #elif defined( HAVE_KERNEL_SCHEDULER_H ) p_priv->thread_id = spawn_thread( (thread_func)thread_entry, psz_name, @@ -626,6 +622,17 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file, { vlc_object_internals_t *p_priv = vlc_internals( p_this ); + if( !p_priv->b_thread ) + { +#ifndef __APPLE__ + msg_Err( p_this, "couldn't set priority of non-existent thread" ); + return ESRCH; +#else +# warning FIXME: this is wrong + p_priv->b_thread = pthread_self(); +#endif + } + #if defined( LIBVLC_USE_PTHREAD ) # ifndef __APPLE__ if( config_GetInt( p_this, "rt-priority" ) > 0 ) @@ -647,10 +654,8 @@ 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_priv->thread_id ) - p_priv->thread_id = pthread_self(); if( (i_error = pthread_setschedparam( p_priv->thread_id, - i_policy, ¶m )) ) + i_policy, ¶m )) ) { errno = i_error; msg_Warn( p_this, "couldn't set thread priority (%s:%d): %m", @@ -662,8 +667,6 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file, #elif defined( WIN32 ) || defined( UNDER_CE ) VLC_UNUSED( psz_file); VLC_UNUSED( i_line ); - if( !p_priv->thread_id ) - p_priv->thread_id = GetCurrentThread(); if( !SetThreadPriority(p_priv->thread_id, i_priority) ) { msg_Warn( p_this, "couldn't set a faster priority" ); @@ -675,14 +678,6 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file, return 0; } -/***************************************************************************** - * vlc_thread_ready: tell the parent thread we were successfully spawned - *****************************************************************************/ -void __vlc_thread_ready( vlc_object_t *p_this ) -{ - vlc_object_signal( p_this ); -} - /***************************************************************************** * vlc_thread_join: wait until a thread exits, inner version *****************************************************************************/