diff options
Diffstat (limited to 'src/sip/sip.c')
-rw-r--r-- | src/sip/sip.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/sip/sip.c b/src/sip/sip.c index c9d4d46..59cf21f 100644 --- a/src/sip/sip.c +++ b/src/sip/sip.c @@ -1428,6 +1428,15 @@ static void sip_message(nua_event_t event, int status, char const *phrase, nua_t call_t *call; PDEBUG(DSIP, DEBUG_DEBUG, "Event %d from SIP stack received (handle=%p)\n", event, nh); + + switch (event) { + case nua_r_shutdown: + sip_ep->shutdown_complete = 1; + break; + default: + ; + } + if (!nh) return; @@ -1760,8 +1769,14 @@ void sip_endpoint_destroy(sip_endpoint_t *sip_ep) stun_handle_destroy(sip_ep->stun_handle); if (sip_ep->register_handle) nua_handle_destroy(sip_ep->register_handle); - if (sip_ep->su_root) + if (sip_ep->su_root) { + nua_shutdown(sip_ep->nua); + while (!sip_ep->shutdown_complete) { + su_root_step(sip_ep->su_root, 0); + usleep(1000); + } su_root_destroy(sip_ep->su_root); + } if (sip_ep->nua) nua_destroy(sip_ep->nua); free(sip_ep); |