chan_sip: Fix segfault during module unload

If a TCP/TLS connection was pending (not accepted and not timed out) during
unload of chan_sip, Asterisk would segfault when trying to send a signal to
a thread whose thread ID hadn't been recorded yet. This commit fixes that by
recording the thread ID before calling the blocking connect() syscall.
This was a regression introduced by 776a14386a.

The above wasn't enough to fix the segfault, which was now delayed to the
point where connect() timed out. Therefore, it was necessary to also remove
the SA_RESTART flag from the SIGURG sigaction so that pthread_kill() could be
used to interruput the connect() syscall.
This was a regression introduced by 5d313f51b9.

ASTERISK-26586 #close

Change-Id: I76fd9d47d56e4264e2629bce8ec15fecba673e7b
This commit is contained in:
Michael Kuron
2016-11-26 17:57:03 +01:00
parent d9b24cce0a
commit 0b588778c0
2 changed files with 8 additions and 4 deletions

View File

@@ -1669,7 +1669,6 @@ static void _urg_handler(int num)
static struct sigaction urg_handler = {
.sa_handler = _urg_handler,
.sa_flags = SA_RESTART,
};
static void _hup_handler(int num)