summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c34
1 files changed, 23 insertions, 11 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c
index c4f38d9b..91b02711 100644
--- a/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/pjsip/src/pjsua-lib/pjsua_core.c
@@ -348,15 +348,17 @@ static pj_bool_t options_on_rx_request(pjsip_rx_data *rdata)
pjsip_msg_add_hdr(tdata->msg, h);
}
- /* Get media socket info */
- pjmedia_transport_info_init(&tpinfo);
- pjmedia_transport_get_info(pjsua_var.calls[0].med_tp, &tpinfo);
+ /* Get media socket info, make sure transport is ready */
+ if (pjsua_var.calls[0].med_tp) {
+ pjmedia_transport_info_init(&tpinfo);
+ pjmedia_transport_get_info(pjsua_var.calls[0].med_tp, &tpinfo);
- /* Add SDP body, using call0's RTP address */
- status = pjmedia_endpt_create_sdp(pjsua_var.med_endpt, tdata->pool, 1,
- &tpinfo.sock_info, &sdp);
- if (status == PJ_SUCCESS) {
- pjsip_create_sdp_body(tdata->pool, sdp, &tdata->msg->body);
+ /* Add SDP body, using call0's RTP address */
+ status = pjmedia_endpt_create_sdp(pjsua_var.med_endpt, tdata->pool, 1,
+ &tpinfo.sock_info, &sdp);
+ if (status == PJ_SUCCESS) {
+ pjsip_create_sdp_body(tdata->pool, sdp, &tdata->msg->body);
+ }
}
/* Send response statelessly */
@@ -1248,9 +1250,6 @@ PJ_DEF(pj_status_t) pjsua_destroy(void)
}
}
- /* Destroy media */
- pjsua_media_subsys_destroy();
-
/* Destroy endpoint. */
if (pjsua_var.endpt) {
@@ -1272,6 +1271,16 @@ PJ_DEF(pj_status_t) pjsua_destroy(void)
PJ_LOG(4,(THIS_FILE, "Destroying..."));
+ /* Terminate all calls again, just in case there's new call
+ * picked up during busy_sleep()
+ */
+ pjsua_call_hangup_all();
+
+ /* Destroy media after all polling is done, as there may be
+ * incoming request that needs handling (e.g. OPTIONS)
+ */
+ pjsua_media_subsys_destroy();
+
/* Must destroy endpoint first before destroying pools in
* buddies or accounts, since shutting down transaction layer
* may emit events which trigger some buddy or account callbacks
@@ -1295,6 +1304,9 @@ PJ_DEF(pj_status_t) pjsua_destroy(void)
pjsua_var.acc[i].pool = NULL;
}
}
+ } else {
+ /* Destroy media */
+ pjsua_media_subsys_destroy();
}
/* Destroy mutex */