[Pkg-voip-commits] [janus] 87/282: Made a few changes to how a SIPre session is destroyed
Jonas Smedegaard
dr at jones.dk
Wed Dec 20 21:53:30 UTC 2017
This is an automated email from the git hooks/post-receive script.
js pushed a commit to annotated tag debian/0.2.6-1
in repository janus.
commit 2cf75b826d93694372af41ed898db81c8c58f84c
Author: Lorenzo Miniero <lminiero at gmail.com>
Date: Tue Jul 25 13:02:02 2017 +0200
Made a few changes to how a SIPre session is destroyed
---
plugins/janus_sipre.c | 138 +++++++++++++++++++++++++++-----------------------
1 file changed, 76 insertions(+), 62 deletions(-)
diff --git a/plugins/janus_sipre.c b/plugins/janus_sipre.c
index afd4632..c70ebad 100644
--- a/plugins/janus_sipre.c
+++ b/plugins/janus_sipre.c
@@ -245,6 +245,7 @@ typedef enum janus_sipre_mqueue_event {
janus_sipre_mqueue_event_do_info,
janus_sipre_mqueue_event_do_message,
janus_sipre_mqueue_event_do_bye,
+ janus_sipre_mqueue_event_do_close,
janus_sipre_mqueue_event_do_destroy,
/* TODO Add other events here */
janus_sipre_mqueue_event_do_exit
@@ -271,6 +272,8 @@ static const char *janus_sipre_mqueue_event_string(janus_sipre_mqueue_event even
return "message";
case janus_sipre_mqueue_event_do_bye:
return "bye";
+ case janus_sipre_mqueue_event_do_close:
+ return "close";
case janus_sipre_mqueue_event_do_destroy:
return "destroy";
case janus_sipre_mqueue_event_do_exit:
@@ -739,64 +742,8 @@ static void *janus_sipre_watchdog(void *data) {
GList *rm = sl->next;
old_sessions = g_list_delete_link(old_sessions, sl);
sl = rm;
- sipsess_close_all(session->stack.sess_sock);
- sip_close(session->stack.sipstack, FALSE);
- session->stack.sipstack = NULL;
- if(session->account.identity) {
- g_hash_table_remove(identities, session->account.identity);
- g_free(session->account.identity);
- session->account.identity = NULL;
- }
- session->account.sips = TRUE;
- if(session->account.proxy) {
- g_free(session->account.proxy);
- session->account.proxy = NULL;
- }
- if(session->account.outbound_proxy) {
- g_free(session->account.outbound_proxy);
- session->account.outbound_proxy = NULL;
- }
- if(session->account.secret) {
- g_free(session->account.secret);
- session->account.secret = NULL;
- }
- if(session->account.username) {
- g_free(session->account.username);
- session->account.username = NULL;
- }
- if(session->account.display_name) {
- g_free(session->account.display_name);
- session->account.display_name = NULL;
- }
- if(session->account.authuser) {
- g_free(session->account.authuser);
- session->account.authuser = NULL;
- }
- if(session->callee) {
- g_free(session->callee);
- session->callee = NULL;
- }
- if(session->callid) {
- g_hash_table_remove(callids, session->callid);
- g_free(session->callid);
- session->callid = NULL;
- }
- if(session->sdp) {
- janus_sdp_free(session->sdp);
- session->sdp = NULL;
- }
- if(session->transaction) {
- g_free(session->transaction);
- session->transaction = NULL;
- }
- if(session->media.remote_ip) {
- g_free(session->media.remote_ip);
- session->media.remote_ip = NULL;
- }
- janus_sipre_srtp_cleanup(session);
- session->handle = NULL;
- g_free(session);
- session = NULL;
+ /* Destroy this SIP session in the queue handler */
+ mqueue_push(mq, janus_sipre_mqueue_event_do_destroy, janus_sipre_mqueue_payload_create(session, NULL, 0, NULL));
continue;
}
sl = sl->next;
@@ -1157,8 +1104,8 @@ void janus_sipre_destroy_session(janus_plugin_session *handle, int *error) {
JANUS_LOG(LOG_VERB, "Destroying SIPre session (%s)...\n", session->account.username ? session->account.username : "unregistered user");
/* Unregister */
mqueue_push(mq, janus_sipre_mqueue_event_do_unregister, janus_sipre_mqueue_payload_create(session, NULL, 0, NULL));
- /* Destroy re-related stuff for this SIP session */
- mqueue_push(mq, janus_sipre_mqueue_event_do_destroy, janus_sipre_mqueue_payload_create(session, NULL, 0, NULL));
+ /* Close re-related stuff for this SIP session */
+ mqueue_push(mq, janus_sipre_mqueue_event_do_close, janus_sipre_mqueue_payload_create(session, NULL, 0, NULL));
/* Cleaning up and removing the session is done in a lazy way */
old_sessions = g_list_append(old_sessions, session);
}
@@ -3714,7 +3661,64 @@ void janus_sipre_cb_exit(void *arg) {
JANUS_LOG(LOG_HUGE, "[SIPre-??] janus_sipre_cb_exit\n");
return;
}
+ if(!session->destroyed)
+ return;
JANUS_LOG(LOG_INFO, "[SIPre-%s] Cleaning SIP stack\n", session->account.username);
+ if(session->account.identity) {
+ g_hash_table_remove(identities, session->account.identity);
+ g_free(session->account.identity);
+ session->account.identity = NULL;
+ }
+ session->account.sips = TRUE;
+ if(session->account.proxy) {
+ g_free(session->account.proxy);
+ session->account.proxy = NULL;
+ }
+ if(session->account.outbound_proxy) {
+ g_free(session->account.outbound_proxy);
+ session->account.outbound_proxy = NULL;
+ }
+ if(session->account.secret) {
+ g_free(session->account.secret);
+ session->account.secret = NULL;
+ }
+ if(session->account.username) {
+ g_free(session->account.username);
+ session->account.username = NULL;
+ }
+ if(session->account.display_name) {
+ g_free(session->account.display_name);
+ session->account.display_name = NULL;
+ }
+ if(session->account.authuser) {
+ g_free(session->account.authuser);
+ session->account.authuser = NULL;
+ }
+ if(session->callee) {
+ g_free(session->callee);
+ session->callee = NULL;
+ }
+ if(session->callid) {
+ g_hash_table_remove(callids, session->callid);
+ g_free(session->callid);
+ session->callid = NULL;
+ }
+ if(session->sdp) {
+ janus_sdp_free(session->sdp);
+ session->sdp = NULL;
+ }
+ if(session->transaction) {
+ g_free(session->transaction);
+ session->transaction = NULL;
+ }
+ if(session->media.remote_ip) {
+ g_free(session->media.remote_ip);
+ session->media.remote_ip = NULL;
+ }
+ janus_sipre_srtp_cleanup(session);
+ session->handle = NULL;
+ g_free(session);
+ session = NULL;
}
/* Callback to implement SIP requests in the re_main loop thread */
@@ -4124,10 +4128,10 @@ void janus_sipre_mqueue_handler(int id, void *data, void *arg) {
session->status = janus_sipre_call_status_idle;
break;
}
- case janus_sipre_mqueue_event_do_destroy: {
+ case janus_sipre_mqueue_event_do_close: {
janus_sipre_mqueue_payload *payload = (janus_sipre_mqueue_payload *)data;
janus_sipre_session *session = (janus_sipre_session *)payload->session;
- JANUS_LOG(LOG_VERB, "[SIPre-%s] Destroying session\n", session->account.username);
+ JANUS_LOG(LOG_VERB, "[SIPre-%s] Closing session\n", session->account.username);
/* FIXME How to correctly clean up? */
mem_deref(session->stack.reg);
session->stack.reg = NULL;
@@ -4137,6 +4141,16 @@ void janus_sipre_mqueue_handler(int id, void *data, void *arg) {
session->stack.dns_client = NULL;
break;
}
+ case janus_sipre_mqueue_event_do_destroy: {
+ janus_sipre_mqueue_payload *payload = (janus_sipre_mqueue_payload *)data;
+ janus_sipre_session *session = (janus_sipre_session *)payload->session;
+ JANUS_LOG(LOG_VERB, "[SIPre-%s] Destroying session\n", session->account.username);
+ /* Destroy the session and wrap up */
+ sipsess_close_all(session->stack.sess_sock);
+ sip_close(session->stack.sipstack, FALSE);
+ session->stack.sipstack = NULL;
+ break;
+ }
case janus_sipre_mqueue_event_do_exit:
/* We're done, here, break the loop */
re_cancel();
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-voip/janus.git
More information about the Pkg-voip-commits
mailing list