@ -1778,6 +1778,46 @@ static void set_icon(char *text)
fprintf ( stdout , " \033 ]1;%s \007 " , text ) ;
}
/*! \brief Set priority on all known threads. */
static int set_priority_all ( int pri )
{
# if !defined(__linux__)
/* The non-linux version updates the entire process prio. */
return ast_set_priority ( pri ) ;
# elif defined(LOW_MEMORY)
ast_log ( LOG_WARNING , " Unable to enumerate all threads to update priority \n " ) ;
return ast_set_priority ( pri ) ;
# else
struct thread_list_t * cur ;
struct sched_param sched ;
char const * policy_str ;
int policy ;
memset ( & sched , 0 , sizeof ( sched ) ) ;
if ( pri ) {
policy = SCHED_RR ;
policy_str = " realtime " ;
sched . sched_priority = 10 ;
} else {
policy = SCHED_OTHER ;
policy_str = " regular " ;
sched . sched_priority = 0 ;
}
if ( sched_setscheduler ( getpid ( ) , policy , & sched ) ) {
ast_log ( LOG_WARNING , " Unable to set %s thread priority on main thread \n " , policy_str ) ;
return - 1 ;
}
ast_verb ( 1 , " Setting %s thread priority on all threads \n " , policy_str ) ;
AST_RWLIST_RDLOCK ( & thread_list ) ;
AST_RWLIST_TRAVERSE ( & thread_list , cur , list ) {
/* Don't care about the return value. It should work. */
sched_setscheduler ( cur - > lwp , policy , & sched ) ;
}
AST_RWLIST_UNLOCK ( & thread_list ) ;
return 0 ;
# endif
}
/*! \brief We set ourselves to a high priority, that we might pre-empt
* everything else . If your PBX has heavy activity on it , this is a
* good thing .
@ -3744,7 +3784,7 @@ static void *canary_thread(void *unused)
" He's kicked the bucket. He's shuffled off his mortal coil, "
" run down the curtain, and joined the bleeding choir invisible!! "
" THIS is an EX-CANARY. (Reducing priority) \n " ) ;
ast_ set_priority( 0 ) ;
set_priority_all ( 0 ) ;
pthread_exit ( NULL ) ;
}