mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-03 19:16:46 +00:00
Merge "asterisk.c: When astcanary dies on linux, reset priority on all threads." into 13
This commit is contained in:
@@ -1863,6 +1863,46 @@ static void set_icon(char *text)
|
|||||||
fprintf(stdout, "\033]1;%s\007", 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
|
/*! \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
|
* everything else. If your PBX has heavy activity on it, this is a
|
||||||
* good thing.
|
* good thing.
|
||||||
@@ -3832,7 +3872,7 @@ static void *canary_thread(void *unused)
|
|||||||
"He's kicked the bucket. He's shuffled off his mortal coil, "
|
"He's kicked the bucket. He's shuffled off his mortal coil, "
|
||||||
"run down the curtain, and joined the bleeding choir invisible!! "
|
"run down the curtain, and joined the bleeding choir invisible!! "
|
||||||
"THIS is an EX-CANARY. (Reducing priority)\n");
|
"THIS is an EX-CANARY. (Reducing priority)\n");
|
||||||
ast_set_priority(0);
|
set_priority_all(0);
|
||||||
pthread_exit(NULL);
|
pthread_exit(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user