summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib/pjsua_media.c
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2011-10-25 08:51:02 +0000
committerLiong Sauw Ming <ming@teluu.com>2011-10-25 08:51:02 +0000
commit9e4ddc18f6e2b4d9a68f1c93bfee541f315e80fc (patch)
tree8767cf3d0f107c80000087a590c48555f7be5639 /pjsip/src/pjsua-lib/pjsua_media.c
parentd11fa21bf60ef14b9979ac3643dad1360f442c7f (diff)
Fixed #1398: TURN initialization failure scenario
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3849 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_media.c')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 60aebbeb..57866983 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -777,10 +777,12 @@ static void on_ice_complete(pjmedia_transport *tp,
switch (op) {
case PJ_ICE_STRANS_OP_INIT:
+ PJSUA_LOCK();
call_med->tp_ready = result;
if (call_med->med_create_cb)
(*call_med->med_create_cb)(call_med, result,
call_med->call->secure_level, NULL);
+ PJSUA_UNLOCK();
break;
case PJ_ICE_STRANS_OP_NEGOTIATION:
if (result != PJ_SUCCESS) {
@@ -1419,24 +1421,15 @@ pj_status_t pjsua_call_media_init(pjsua_call_media *call_med,
set_media_tp_state(call_med, PJSUA_MED_TP_CREATING);
- if (async) {
- call_med->med_create_cb = &call_media_init_cb;
- call_med->med_init_cb = cb;
- }
-
if (pjsua_var.media_cfg.enable_ice) {
status = create_ice_media_transport(tcfg, call_med, async);
- if (async && status == PJ_SUCCESS) {
- /* Callback has been called. */
- call_med->med_init_cb = NULL;
- /* We cannot return PJ_SUCCESS here since we already call
- * the callback.
- */
- return PJ_EPENDING;
- } else if (async && status == PJ_EPENDING) {
+ if (async && status == PJ_EPENDING) {
/* We will resume call media initialization in the
* on_ice_complete() callback.
*/
+ call_med->med_create_cb = &call_media_init_cb;
+ call_med->med_init_cb = cb;
+
return PJ_EPENDING;
}
} else {