[Freeswitch-branches] [commit] r1986 - freeswitch/branches/stkn/src/mod/endpoints/mod_pjsip

Freeswitch SVN anthm at freeswitch.org
Wed Jul 19 14:01:40 EDT 2006


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 );



More information about the Freeswitch-branches mailing list