channels/chan_sip: Fix crash when transmitting packet after thread shutdown
authorMatthew Jordan <mjordan@digium.com>
Tue, 24 Feb 2015 22:14:44 +0000 (22:14 +0000)
committerMatthew Jordan <mjordan@digium.com>
Tue, 24 Feb 2015 22:14:44 +0000 (22:14 +0000)
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
........

Merged revisions 432199 from http://svn.asterisk.org/svn/asterisk/branches/13

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432200 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 43dc6af..f132cdd 100644 (file)
@@ -28915,7 +28915,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 {