Commit adb3c550 authored by Derk-Jan Hartman's avatar Derk-Jan Hartman

* This patch does what the revert'ed patch from before should have done....

* This patch does what the revert'ed patch from before should have done. Changing priorities of vlc threads with --rt-priotity and --rt-offset. (Note that 'rt' isn't 'realtime'. We should use Mach threading for that on Darwin)
* It also fixes the errors on the non-existent  rt-priority and rt-offset on start, which was caused because no config was loaded yet.
parent 5730eaaa
...@@ -343,7 +343,7 @@ int __vlc_mutex_destroy( char * psz_file, int i_line, vlc_mutex_t *p_mutex ) ...@@ -343,7 +343,7 @@ int __vlc_mutex_destroy( char * psz_file, int i_line, vlc_mutex_t *p_mutex )
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
i_result = pthread_mutex_destroy( &p_mutex->mutex ); i_result = pthread_mutex_destroy( &p_mutex->mutex );
if ( i_result ) if( i_result )
{ {
i_thread = (int)pthread_self(); i_thread = (int)pthread_self();
psz_error = strerror(i_result); psz_error = strerror(i_result);
...@@ -492,7 +492,7 @@ int __vlc_cond_destroy( char * psz_file, int i_line, vlc_cond_t *p_condvar ) ...@@ -492,7 +492,7 @@ int __vlc_cond_destroy( char * psz_file, int i_line, vlc_cond_t *p_condvar )
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
i_result = pthread_cond_destroy( &p_condvar->cond ); i_result = pthread_cond_destroy( &p_condvar->cond );
if ( i_result ) if( i_result )
{ {
i_thread = (int)pthread_self(); i_thread = (int)pthread_self();
psz_error = strerror(i_result); psz_error = strerror(i_result);
...@@ -552,9 +552,9 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line, ...@@ -552,9 +552,9 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line,
#endif #endif
} }
if ( p_this->thread_id && i_priority ) if( p_this->thread_id && i_priority )
{ {
if ( !SetThreadPriority(p_this->thread_id, i_priority) ) if( !SetThreadPriority(p_this->thread_id, i_priority) )
{ {
msg_Warn( p_this, "couldn't set a faster priority" ); msg_Warn( p_this, "couldn't set a faster priority" );
i_priority = 0; i_priority = 0;
...@@ -571,16 +571,16 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line, ...@@ -571,16 +571,16 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line,
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #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_this->thread_id, NULL, func, p_data );
#ifndef SYS_DARWIN if( config_GetType( p_this, "rt-priority" ) && config_GetInt( p_this, "rt-priority" ) )
if ( config_GetInt( p_this, "rt-priority" ) )
#endif
{ {
int i_error, i_policy; int i_error, i_policy;
struct sched_param param; struct sched_param param;
memset( &param, 0, sizeof(struct sched_param) ); memset( &param, 0, sizeof(struct sched_param) );
#if !defined(SYS_BEOS) && defined(PTHREAD_COND_T_IN_PTHREAD_H)
i_priority += config_GetInt( p_this, "rt-offset" ); i_priority += config_GetInt( p_this, "rt-offset" );
if ( i_priority <= 0 ) #endif
if( i_priority <= 0 )
{ {
param.sched_priority = (-1) * i_priority; param.sched_priority = (-1) * i_priority;
i_policy = SCHED_OTHER; i_policy = SCHED_OTHER;
...@@ -590,7 +590,7 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line, ...@@ -590,7 +590,7 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line,
param.sched_priority = i_priority; param.sched_priority = i_priority;
i_policy = SCHED_RR; i_policy = SCHED_RR;
} }
if ( (i_error = pthread_setschedparam( p_this->thread_id, if( (i_error = pthread_setschedparam( p_this->thread_id,
i_policy, &param )) ) i_policy, &param )) )
{ {
msg_Warn( p_this, "couldn't set thread priority (%s:%d): %s", msg_Warn( p_this, "couldn't set thread priority (%s:%d): %s",
...@@ -598,12 +598,10 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line, ...@@ -598,12 +598,10 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line,
i_priority = 0; i_priority = 0;
} }
} }
#ifndef SYS_DARWIN
else else
{ {
i_priority = 0; i_priority = 0;
} }
#endif
#elif defined( HAVE_CTHREADS_H ) #elif defined( HAVE_CTHREADS_H )
p_this->thread_id = cthread_fork( (cthread_fn_t)func, (any_t)p_data ); p_this->thread_id = cthread_fork( (cthread_fn_t)func, (any_t)p_data );
...@@ -651,23 +649,21 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, char * psz_file, ...@@ -651,23 +649,21 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, char * psz_file,
{ {
#if defined( PTH_INIT_IN_PTH_H ) || defined( ST_INIT_IN_ST_H ) #if defined( PTH_INIT_IN_PTH_H ) || defined( ST_INIT_IN_ST_H )
#elif defined( WIN32 ) || defined( UNDER_CE ) #elif defined( WIN32 ) || defined( UNDER_CE )
if ( !SetThreadPriority(GetCurrentThread(), i_priority) ) if( !SetThreadPriority(GetCurrentThread(), i_priority) )
{ {
msg_Warn( p_this, "couldn't set a faster priority" ); msg_Warn( p_this, "couldn't set a faster priority" );
return 1; return 1;
} }
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
#ifndef SYS_DARWIN if( config_GetType( p_this, "rt-priority" ) && config_GetInt( p_this, "rt-priority" ) )
if ( config_GetInt( p_this, "rt-priority" ) )
#endif
{ {
int i_error, i_policy; int i_error, i_policy;
struct sched_param param; struct sched_param param;
memset( &param, 0, sizeof(struct sched_param) ); memset( &param, 0, sizeof(struct sched_param) );
i_priority += config_GetInt( p_this, "rt-offset" ); i_priority += config_GetInt( p_this, "rt-offset" );
if ( i_priority <= 0 ) if( i_priority <= 0 )
{ {
param.sched_priority = (-1) * i_priority; param.sched_priority = (-1) * i_priority;
i_policy = SCHED_OTHER; i_policy = SCHED_OTHER;
...@@ -677,9 +673,9 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, char * psz_file, ...@@ -677,9 +673,9 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, char * psz_file,
param.sched_priority = i_priority; param.sched_priority = i_priority;
i_policy = SCHED_RR; i_policy = SCHED_RR;
} }
if ( !p_this->thread_id ) if( !p_this->thread_id )
p_this->thread_id = pthread_self(); p_this->thread_id = pthread_self();
if ( (i_error = pthread_setschedparam( p_this->thread_id, if( (i_error = pthread_setschedparam( p_this->thread_id,
i_policy, &param )) ) i_policy, &param )) )
{ {
msg_Warn( p_this, "couldn't set thread priority (%s:%d): %s", msg_Warn( p_this, "couldn't set thread priority (%s:%d): %s",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment