mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-01 19:43:03 +00:00
ensure scheduling priority is inherited into new threads (issue #5293)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6692 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
13
utils.c
13
utils.c
@@ -475,6 +475,19 @@ int ast_pthread_create_stack(pthread_t *thread, pthread_attr_t *attr, void *(*st
|
|||||||
pthread_attr_init(&lattr);
|
pthread_attr_init(&lattr);
|
||||||
attr = &lattr;
|
attr = &lattr;
|
||||||
}
|
}
|
||||||
|
#ifdef __linux__
|
||||||
|
/* On Linux, pthread_attr_init() defaults to PTHREAD_EXPLICIT_SCHED,
|
||||||
|
which is kind of useless. Change this here to
|
||||||
|
PTHREAD_INHERIT_SCHED; that way the -p option to set realtime
|
||||||
|
priority will propagate down to new threads by default.
|
||||||
|
This does mean that callers cannot set a different priority using
|
||||||
|
PTHREAD_EXPLICIT_SCHED in the attr argument; instead they must set
|
||||||
|
the priority afterwards with pthread_setschedparam(). */
|
||||||
|
errno = pthread_attr_setinheritsched(attr, PTHREAD_INHERIT_SCHED);
|
||||||
|
if (errno)
|
||||||
|
ast_log(LOG_WARNING, "pthread_attr_setinheritsched returned non-zero: %s\n", strerror(errno));
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!stacksize)
|
if (!stacksize)
|
||||||
stacksize = AST_STACKSIZE;
|
stacksize = AST_STACKSIZE;
|
||||||
errno = pthread_attr_setstacksize(attr, stacksize);
|
errno = pthread_attr_setstacksize(attr, stacksize);
|
||||||
|
|||||||
Reference in New Issue
Block a user