ChallyCai / doubango

Automatically exported from code.google.com/p/doubango
0 stars 1 forks source link

delay detroy of sip session , #51

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. i use imsdroid, i see that when the call end ,the tsip_ssession_dtor will 
destroy the session, and then destroy  audio and video session, but it delay 
about ten more seconds to be called, from the debug ,i learn that the stack 
only destroy the session(tsip_ssession_dtor be called ) after some sip timer 
come to end , finaly call tsip_transac_ict_OnTerminated.

2.
3.

What is the expected output? What do you see instead?

What version of the product are you using? On what operating system?

Please provide any additional information below.

Original issue reported on code.google.com by openser@yeah.net on 19 Jul 2011 at 7:05

GoogleCodeExporter commented 9 years ago
as delay  destroy time of sip session, the onplugindestroy function in java 
will be delay, so if i have another call during this time , the audio and video 
plugin may be destroyed at this time ,from the debug i see the destructor of 
CallSession ,InviteSession, SIpsession ,MediaSessionMgr all be called at onece 
after call end, but it delay to call those ctor in doubango C, so ,may it be 
problem of swig jni mechanism ? 
Any   idear sir ?
thanks .

Original comment by openser@yeah.net on 22 Jul 2011 at 1:19

GoogleCodeExporter commented 9 years ago
To be honest I don't understand the problem at all :)
The framework use reference counting mechanism which means that a C/C++ object 
will be destroyed only after the "refcount" value reach zero. 

When you make hangup a call the SIP "BYE" request will create a new client 
transaction which has a reference on the INVITE dialog. And the dialog holds a 
reference on of the SipSession.
This means that the dialog will be destroyed after the transaction object as 
the later has a reference of the former. 
In SIP after a client transaction receive a final response (in this case 2xx 
BYE) you have raise a timer ("K") in order to absorb retransmission or 
out-of-order requests. This means that or transaction object will only be 
destroyed when the timer "K" timeout.

This said, InviteSession, CallSession ... are just C++ wrappers around ANSI-C 
objects. The life-cycle of these object is managed by java garbage collector 
which means that the dtors are only called when you no longer hold any 
reference in our java code. Take care: The garbage collector will not collect 
the objects immediately, it's system dependent.

Original comment by boss...@yahoo.fr on 22 Jul 2011 at 2:04

GoogleCodeExporter commented 9 years ago
the fallow is debug log .
we see mRefCount is 0 in time 10:50, but the destructor is called about 10 
senconds later . so it delay to remove mediaSessionMgr plugins .

D/org.doubango.imsdroid.Screens.ScreenAV( 1178): onStop()
D/org.doubango.imsdroid.Screens.ScreenAV( 1178): onDestroy()
D/org.doubango.imsdroid.Screens.ScreenAV( 1178): release invite session 
I/tinyWRAP( 1178): [Jan  2 03:10:50] DEBUG[1178]: 
../../_common/SipSession.cxx:358 virtual CallSession::~CallSession(): 
I/tinyWRAP( 1178): callsesion
I/tinyWRAP( 1178): [Jan  2 03:10:50] DEBUG[1178]: 
../../_common/SipSession.cxx:206 virtual InviteSession::~InviteSession(): 
I/tinyWRAP( 1178): destroy invite session media mgr
I/tinyWRAP( 1178): [Jan  2 03:10:50] DEBUG[1178]: 
../../_common/MediaSessionMgr.cxx:28 void* __droid_destroy_mgr(void*): 
I/tinyWRAP( 1178): destroy mgr session
I/tinyWRAP( 1178): [Jan  2 03:10:50] DEBUG[1178]: 
../../_common/SipSession.cxx:55 virtual SipSession::~SipSession(): 
I/tinyWRAP( 1178): destroy sipSession
D/org.doubango.ngn.sip.NgnSipSession( 1178): destroy this session
D/org.doubango.ngn.sip.NgnSipSession( 1178): mRefCount=0

I/tinyWRAP( 1178): [Jan  2 03:10:53] DEBUG[1178]: src/tsk_timer.c:312 
__tsk_timer_manager_mainthread: 
I/tinyWRAP( 1178): Timer raise 56
I/tinyWRAP( 1178): [Jan  2 03:10:53] DEBUG[1178]: 
src/transactions/tsip_transac_nict.c:189 tsip_transac_nict_timer_callback: 
I/tinyWRAP( 1178): none invite client transac timer
I/tinyWRAP( 1178): [Jan  2 03:10:53] DEBUG[1178]: src/tsk_fsm.c:158 
tsk_fsm_act: 
I/tinyWRAP( 1178): State machine: 
tsip_transac_nict_Completed_2_Terminated_X_timerK
I/tinyWRAP( 1178): [Jan  2 03:10:53] DEBUG[1178]: src/tsk_fsm.c:188 
tsk_fsm_act: 
I/tinyWRAP( 1178): fsm on terminal state
I/tinyWRAP( 1178): [Jan  2 03:10:53] DEBUG[1178]: 
src/transactions/tsip_transac_nict.c:648 tsip_transac_nict_OnTerminated: 
I/tinyWRAP( 1178): === NICT terminated ===
I/tinyWRAP( 1178): *** NICT destroyed ***

I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: src/tsk_timer.c:312 
__tsk_timer_manager_mainthread: 
I/tinyWRAP( 1178): Timer raise 53
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: src/tsk_fsm.c:158 
tsk_fsm_act: 
I/tinyWRAP( 1178): State machine: tsip_transac_ist_Accepted_2_Terminated_timerL
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: src/tsk_fsm.c:188 
tsk_fsm_act: 
I/tinyWRAP( 1178): fsm on terminal state
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: 
src/transactions/tsip_transac_ist.c:696 tsip_transac_ist_OnTerminated: 
I/tinyWRAP( 1178): === IST terminated ===
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: src/tsip_ssession.c:582 
tsip_ssession_dtor: 
I/tinyWRAP( 1178): *** SIP Session destroyed ***
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: src/tmedia_session.c:1291 
tmedia_session_mgr_dtor: 
I/tinyWRAP( 1178): dectroy all video audio session
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: 
src/audio/tdav_session_audio.c:830 tdav_session_audio_dtor: 
I/tinyWRAP( 1178): destroy audio sessions
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: 
src/audio/tdav_session_audio.c:849 tdav_session_audio_dtor: 
I/tinyWRAP( 1178): destroyed audio producer and consumer
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: src/tmedia_consumer.c:158 
tmedia_consumer_deinit: 
I/tinyWRAP( 1178): deinit
D/org.doubango.ngn.media.NgnProxyPluginMgr( 1178): 
OnPluginDestroyed(21,twrap_proxy_plugin_audio_consumer)
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: src/tmedia_producer.c:175 
tmedia_producer_deinit: 
I/tinyWRAP( 1178): deinit producer
D/org.doubango.ngn.media.NgnProxyPluginMgr( 1178): 
OnPluginDestroyed(22,twrap_proxy_plugin_audio_producer)
E/tinyWRAP( 1178): ***ERROR: function: "tsk_list_lock()" 
E/tinyWRAP( 1178): file: "src/tsk_list.c" 
E/tinyWRAP( 1178): line: "84" 
E/tinyWRAP( 1178): MSG: Invalid parameter
E/tinyWRAP( 1178): ***ERROR: function: "tsk_list_unlock()" 
E/tinyWRAP( 1178): file: "src/tsk_list.c" 
E/tinyWRAP( 1178): line: "101" 
E/tinyWRAP( 1178): MSG: Invalid parameter
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: 
src/video/tdav_session_video.c:676 tdav_session_video_dtor: 
I/tinyWRAP( 1178): destroy video consumer and producer
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: src/tmedia_consumer.c:158 
tmedia_consumer_deinit: 
I/tinyWRAP( 1178): deinit
D/org.doubango.ngn.media.NgnProxyPluginMgr( 1178): 
OnPluginDestroyed(23,twrap_proxy_plugin_video_consumer)
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: 
../../_common/ProxyProducer.cxx:374 tsk_object_t* 
twrap_producer_proxy_video_dtor(tsk_obj: 
I/tinyWRAP( 1178): proxy video dtor
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: src/tmedia_producer.c:175 
tmedia_producer_deinit: 
I/tinyWRAP( 1178): deinit producer
D/org.doubango.ngn.media.NgnProxyPluginMgr( 1178): 
OnPluginDestroyed(24,twrap_proxy_plugin_video_producer)
E/tinyWRAP( 1178): ***ERROR: function: "tdav_codec_h264_close()" 
E/tinyWRAP( 1178): file: "src/codecs/h264/tdav_codec_h264.c" 
E/tinyWRAP( 1178): line: "276" 
I/tinyWRAP( 1178): [Jan  2 03:11:13] DEBUG[1178]: 
src/dialogs/tsip_dialog_invite.c:1450 tsip_dialog_invite_dtor: 
I/tinyWRAP( 1178): *** INVITE Dialog destroyed ***
I/tinyWRAP( 1178): *** IST destroyed ***

Original comment by openser@yeah.net on 22 Jul 2011 at 3:39

GoogleCodeExporter commented 9 years ago
and the C++ destrouctor :
~CallSession(): 
~InviteSession(): 
:~SipSession(): 
called at  10:50 but the dtor in c is 20s later.

Original comment by openser@yeah.net on 22 Jul 2011 at 3:52

GoogleCodeExporter commented 9 years ago
All is working as expected.
SipSession only holds a reference to "tsip_ssession_t". The ANSI-c dtor will be 
called when the "refcount" value reach zero.
What is the problem?

Original comment by boss...@yahoo.fr on 22 Jul 2011 at 1:17