Hi, I checked out, and am currently verifying, results are great so far! Looks to be working fine, Thanks a lot for this fix -- Tony Million On 15 Feb 2011, at 05:35, Ming wrote: > Hi Tony, > > Sorry for the late reply. I just fixed the crash in > interruptionListener after pjsua is restarted (ticket #1174). Thanks > for the report. > > Best regards, > Ming > > On Fri, Feb 4, 2011 at 8:38 PM, Tony Million <tony at bababoo.com> wrote: >> Ok thats fine, my only question would be how to signal to pj media that the audio should stop and restart when I get the begin / end interruption signal? >> >> Regards, >> -- >> Tony Million >> >> >> On 4 Feb 2011, at 11:10, Ming wrote: >> >>> Hi Tony, >>> >>> Yes, that's right, you will overwrite coreaudio_dev's callback and >>> handle the interruption case at the application level. >>> >>> Regards, >>> Ming >>> >>> On Fri, Feb 4, 2011 at 6:03 PM, Tony Million <tony at bababoo.com> wrote: >>>> Hi Ming, >>>> >>>> I dont quite understand what you mean, wouldn't our AudioSession over-write the PJSIP one? >>>> Sorry to ask, but can you explain this a little better? >>>> >>>> >>>> >>>> What we do in our app is: >>>> >>>> main >>>> { >>>> register callback handler for reachbility >>>> } >>>> >>>> callback handler >>>> { >>>> (release resources if necessary) >>>> pjsua_destroy(); >>>> >>>> if(connectable) >>>> { >>>> .. obviously all the setup here >>>> pjsua_init(); >>>> >>>> (alloc resources) >>>> pjsua_start(); >>>> } >>>> } >>>> >>>> The callback handler is called for any network state change (that is wifi->wifi, wifi->3g wifi->no signal (and the same for all 3G states too)). So in this way when pjsua starts up again it is bound to the correctly connected network interface. Unless there is a method of telling pjsua to rebind to the active network interface that I have missed, this is the only way I have found to handle network transitions. >>>> >>>> >>>> >>>> Also, as a footnote since we are talking about reachability , there is still a compatibility in os_darwinos.h when including <SystemConfiguration/SystemConfiguration.h> the following diff will fix it >>>> >>>> Index: pjlib/include/pj/compat/os_darwinos.h >>>> =================================================================== >>>> --- pjlib/include/pj/compat/os_darwinos.h (revision 3410) >>>> +++ pjlib/include/pj/compat/os_darwinos.h (working copy) >>>> @@ -95,7 +95,10 @@ >>>> /* >>>> * Socket related >>>> */ >>>> -typedef int socklen_t; >>>> +#ifndef _SOCKLEN_T >>>> +#define _SOCKLEN_T >>>> +typedef __darwin_socklen_t socklen_t; >>>> +#endif >>>> >>>> /* Set 1 if native sockaddr_in has sin_len member. >>>> * Default: 0 >>>> >>>> >>>> >>>> >>>> Regards, >>>> -- >>>> Tony Million >>>> Chief Technology Officer - Bababoo Inc >>>> Web: http://www.bababoo.com/ >>>> Tel: +44 20 7993 9152 >>>> Twitter: @bababoo >>>> >>>> On 4 Feb 2011, at 09:09, Ming wrote: >>>> >>>>> Hi Tony, >>>>> >>>>> In the case that you need to restart pjsua, you will need to create >>>>> your own interruptionListener handler. You can do this by calling >>>>> AudioSessionInitialize() before coreaudio calls this function. >>>>> >>>>> Regards, >>>>> Ming >>>>> >>>>> On Thu, Feb 3, 2011 at 4:22 PM, Tony Million <tony at bababoo.com> wrote: >>>>>> I've investigated more, and found the following: >>>>>> When our app detects a change in network (i.e. changing from wifi to 3G or >>>>>> wifi->different wifi, or even losing signal entirely) we shutdown pjsip >>>>>> using pjsua_destroy() then, if/when a network is available we reinitialize >>>>>> pjsua using the same startup code we used in the first instance. >>>>>> When restarting pjsua I see the following error: >>>>>> 08:13:52.942 sip_endpoint.c Module "mod-invite" registered >>>>>> 08:13:52.942 coreaudio_dev. dev_id 0: iPhone IO device (in=1, out=1) >>>>>> 8000Hz >>>>>> 08:13:52.942 coreaudio_dev. Error: cannot initialize audio session >>>>>> services (1768843636) >>>>>> 08:13:52.943 coreaudio_dev. core audio initialized >>>>>> 08:13:52.943 pjlib select() I/O Queue created (0x9dba14) >>>>>> 08:13:52.979 sip_endpoint.c Module "mod-evsub" registered >>>>>> >>>>>> At this point, when I go to make a cellular call, I'll see the same crash I >>>>>> pasted (pasted again for completeness >>>>>> 08:14:57.383 coreaudio_dev. Session interrupted! --- Begin Interruption >>>>>> --- >>>>>> Assertion failed: (mutex), function pj_mutex_lock, file >>>>>> ../src/pj/os_core_unix.c, line 1203. >>>>>> Program received signal: ?SIGABRT?. >>>>>> At >>>>>> As far as I know the only way to get pjsua to work correctly with the new >>>>>> network interface (be it the 3G WWAN or WIFI Network) is to call >>>>>> pjsua_destroy and then start up pjsua again. If this is incorrect I'm happy >>>>>> to change my code. If I do not shutdown/restart pjsua eventually I just >>>>>> start getting 502 (Timeout) responses from pjsua. >>>>>> >>>>>> Hope this helps, >>>>>> Tony >>>>>> On 3 Feb 2011, at 05:06, Ming wrote: >>>>>> >>>>>> Hi Tony, >>>>>> >>>>>> Thanks for the report. Is the crash always reproducible (i.e. does it >>>>>> happen every time you make a call)? >>>>>> Do you set up your own audio session interruptions in your >>>>>> application? Is there any log message from PJSIP on audio session >>>>>> initialization error (Error: cannot initialize audio session >>>>>> services...)? >>>>>> >>>>>> Regards, >>>>>> Ming >>>>>> >>>>>> On Thu, Feb 3, 2011 at 2:24 AM, Tony Million <tony at bababoo.com> wrote: >>>>>> >>>>>> Hi, >>>>>> >>>>>> I've been seeing crashes related to audio session interruptions on the >>>>>> >>>>>> iphone for a while, and just got one while the app is connected to a >>>>>> >>>>>> debugger. >>>>>> >>>>>> I've attached the logs, I had made a call on cellular and just switched back >>>>>> >>>>>> to the PJSip based app. >>>>>> >>>>>> I have numerous crash logs showing the same thing but today is the first day >>>>>> >>>>>> I could catch it in the debugger. Don't know if this helps, I'm running >>>>>> >>>>>> current trunk. >>>>>> >>>>>> 18:08:27.718 coreaudio_dev. Session interrupted! --- Begin Interruption >>>>>> >>>>>> --- >>>>>> >>>>>> Assertion failed: (mutex), function pj_mutex_lock, file >>>>>> >>>>>> ../src/pj/os_core_unix.c, line 1203. >>>>>> >>>>>> Program received signal: ?SIGABRT?. >>>>>> >>>>>> (gdb) bt >>>>>> >>>>>> #0 0x33bd52d4 in __kill () >>>>>> >>>>>> #1 0x33bd52ca in kill () >>>>>> >>>>>> #2 0x33bd52bc in raise () >>>>>> >>>>>> #3 0x33be9d78 in abort () >>>>>> >>>>>> #4 0x33bd7986 in __assert_rtn () >>>>>> >>>>>> #5 0x00076258 in pj_mutex_lock () >>>>>> >>>>>> #6 0x000aa114 in interruptionListener () >>>>>> >>>>>> #7 0x31730772 in SSServer_AudioSessionDeferredListenerMessage () >>>>>> >>>>>> #8 0x316ddf2e in _XAudioSessionDeferredListenerMessage () >>>>>> >>>>>> #9 0x31677bea in mshMIGPerform () >>>>>> >>>>>> #10 0x33a556fe in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ >>>>>> >>>>>> () >>>>>> >>>>>> #11 0x33a556c2 in __CFRunLoopDoSource1 () >>>>>> >>>>>> #12 0x33a47f7c in __CFRunLoopRun () >>>>>> >>>>>> #13 0x33a47c86 in CFRunLoopRunSpecific () >>>>>> >>>>>> #14 0x33a47b8e in CFRunLoopRunInMode () >>>>>> >>>>>> #15 0x33b0e4aa in GSEventRunModal () >>>>>> >>>>>> #16 0x33b0e556 in GSEventRun () >>>>>> >>>>>> #17 0x32099328 in -[UIApplication _run] () >>>>>> >>>>>> #18 0x32096e92 in UIApplicationMain () >>>>>> >>>>>> #19 0x00002cbc in main (argc=1, argv=0x2fdff67c) at >>>>>> >>>>>> /Users/tony/Projects/IOS/main.m:14 >>>>>> >>>>>> >>>>>> Regards, >>>>>> >>>>>> -- >>>>>> >>>>>> Tony Million >>>>>> >>>>>> _______________________________________________ >>>>>> >>>>>> Visit our blog: http://blog.pjsip.org >>>>>> >>>>>> pjsip mailing list >>>>>> >>>>>> pjsip at lists.pjsip.org >>>>>> >>>>>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Visit our blog: http://blog.pjsip.org >>>>>> >>>>>> pjsip mailing list >>>>>> pjsip at lists.pjsip.org >>>>>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Visit our blog: http://blog.pjsip.org >>>>>> >>>>>> pjsip mailing list >>>>>> pjsip at lists.pjsip.org >>>>>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >>>>>> >>>>>> >>>>> >>>>> _______________________________________________ >>>>> Visit our blog: http://blog.pjsip.org >>>>> >>>>> pjsip mailing list >>>>> pjsip at lists.pjsip.org >>>>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >>>> >>>> >>>> _______________________________________________ >>>> Visit our blog: http://blog.pjsip.org >>>> >>>> pjsip mailing list >>>> pjsip at lists.pjsip.org >>>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >>>> >>> >>> _______________________________________________ >>> Visit our blog: http://blog.pjsip.org >>> >>> pjsip mailing list >>> pjsip at lists.pjsip.org >>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >> >> >> _______________________________________________ >> Visit our blog: http://blog.pjsip.org >> >> pjsip mailing list >> pjsip at lists.pjsip.org >> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >> > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org