[commit] r1986 - freeswitch/branches/stkn/src/mod/endpoints/mod_pjsip
Author: anthm Date: Wed Jul 19 14:01:40 2006 New Revision: 1986 Modified: freeswitch/branches/stkn/src/mod/endpoints/mod_pjsip/mod_pjsip.c Log: trying to stop race Modified: freeswitch/branches/stkn/src/mod/endpoints/mod_pjsip/mod_pjsip.c ============================================================================== --- freeswitch/branches/stkn/src/mod/endpoints/mod_pjsip/mod_pjsip.c (original) +++ freeswitch/branches/stkn/src/mod/endpoints/mod_pjsip/mod_pjsip.c Wed Jul 19 14:01:40 2006 @@ -247,18 +247,18 @@ switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Initial SDP created\n" ); /* create INVITE session */ - status = pjsip_inv_create_uac( tech_pvt->sip_dialog, sdp, 0, &tech_pvt->sip_invite ); - if ( status != PJ_SUCCESS ) { + if ((status = pjsip_inv_create_uac( tech_pvt->sip_dialog, sdp, 0, &tech_pvt->sip_invite ) != PJ_SUCCESS )) { switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to create new INVITE session for call %s\n" ); pjsip_dlg_terminate( tech_pvt->sip_dialog ); return SWITCH_STATUS_GENERR; } - switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Invite UAC created\n" ); /* attach private object to pjsip session data */ tech_pvt->sip_invite->mod_data[globals.mod_app.id] = tech_pvt; + switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Invite UAC created\n" ); + /* create invite request */ status = pjsip_inv_invite( tech_pvt->sip_invite, &txdata ); if ( status != PJ_SUCCESS ) { @@ -528,9 +528,10 @@ switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to create new private object for call\n" ); goto err; } + tech_pvt->session = *new_session; switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(*new_session)); tech_pvt->profile = profile; - tech_pvt->session = *new_session; + switch_core_session_set_private( *new_session, tech_pvt ); channel = switch_core_session_get_channel( *new_session ); @@ -768,15 +769,15 @@ return; } + switch_core_session_set_private( session, tech_pvt ); + tech_pvt->session = session; + switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session)); /* need the invite data in pjsip_on_init */ tech_pvt->sip_ua = pjsip_ua_instance(); tech_pvt->profile = profile; - switch_core_session_set_private( session, tech_pvt ); - tech_pvt->session = session; - /* give the new session a name */ pj_strdup_with_null( pjsip_pool, &tmp, &((pjsip_sip_uri *)rxdata->msg_info.from->uri)->host ); snprintf( name, sizeof(name), "pjsip/%s/%s-%04x", profile->name, tmp.ptr, rand() & 0xffff ); @@ -804,10 +805,11 @@ /* Create our initial sdp */ create_sdp( dialog->pool, tech_pvt, &sdp, NULL ); + tech_pvt->sip_dialog = dialog; + /* Create UAS invite session */ - status = pjsip_inv_create_uas( dialog, rxdata, sdp, 0, &tech_pvt->sip_invite ); - if( status != PJ_SUCCESS ) { + if ((status = pjsip_inv_create_uas( dialog, rxdata, sdp, 0, &tech_pvt->sip_invite ) != PJ_SUCCESS )) { pjsip_dlg_create_response( dialog, rxdata, 500, NULL, &txdata ); pjsip_dlg_send_response( dialog, pjsip_rdata_get_tsx( rxdata ), txdata ); @@ -816,6 +818,10 @@ return; } + + tech_pvt->sip_invite->mod_data[globals.mod_app.id] = tech_pvt; + tech_pvt->profile = profile; + pj_strdup_with_null( pjsip_pool, &username, &((pjsip_sip_uri *)rxdata->msg_info.from->uri)->user ); pj_strdup_with_null( pjsip_pool, &host, &((pjsip_sip_uri *)rxdata->msg_info.from->uri)->host ); pj_strdup_with_null( pjsip_pool, &destination, &((pjsip_sip_uri *)rxdata->msg_info.to->uri)->host ); @@ -834,12 +840,7 @@ destination.ptr)) != 0 ) { switch_channel_set_caller_profile( channel, tech_pvt->caller_profile ); } - - /* assign vars */ - tech_pvt->sip_invite->mod_data[globals.mod_app.id] = tech_pvt; - tech_pvt->sip_dialog = dialog; - tech_pvt->profile = profile; - + /* set call id */ pjsip_strncpy( tech_pvt->call_id, &dialog->call_id->id, sizeof( tech_pvt->call_id ) ); @@ -949,11 +950,11 @@ tech_pvt = inv->mod_data[globals.mod_app.id]; assert( tech_pvt != NULL ); + session = tech_pvt->session; + assert ( session != NULL ); + profile = tech_pvt->profile; assert( profile != NULL ); - - session = tech_pvt->session; - assert( session != NULL ); channel = switch_core_session_get_channel( session ); assert( channel != NULL );
participants (1)
-
Freeswitch SVN