diff options
author | Matthew Jordan <mjordan@digium.com> | 2015-02-24 22:14:21 +0000 |
---|---|---|
committer | Matthew Jordan <mjordan@digium.com> | 2015-02-24 22:14:21 +0000 |
commit | 978649a56838c7502a5869b93c697a7c66e5921e (patch) | |
tree | f5192e23e284475847f60efbe56229a782ed8f13 /channels | |
parent | 3d1a1533bf8a12c33419695227884cc8d386b943 (diff) |
channels/chan_sip: Fix crash when transmitting packet after thread shutdown
When the monitor thread is stopped, its pthread ID is set to a specific value
(AST_PTHREADT_STOP) so that later portions of the code can determine whether
or not it is safe to manipulate the thread. Unfortunately, __sip_reliable_xmit
failed to check for that value, checking instead only for AST_PTHREAD_STOP.
Passing the invalid yet very specific value to pthread_kill causes a crash.
This patch adds a check for AST_PTHREADT_STOP in __sip_reliable_xmit such that
it doesn't attempt to poke the thread if the thread has already been stopped.
ASTERISK-24800 #close
Reported by: JoshE
........
Merged revisions 432198 from http://svn.asterisk.org/svn/asterisk/branches/11
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432199 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_sip.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 06217779e..0d8bb2550 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -28902,7 +28902,7 @@ static int restart_monitor(void) ast_log(LOG_WARNING, "Cannot kill myself\n"); return -1; } - if (monitor_thread != AST_PTHREADT_NULL) { + if (monitor_thread != AST_PTHREADT_NULL && monitor_thread != AST_PTHREADT_STOP) { /* Wake up the thread */ pthread_kill(monitor_thread, SIGURG); } else { |