gpt4 book ai didi

android - Pjsip在RegState回调中崩溃

转载 作者:行者123 更新时间:2023-11-29 19:12:46 25 4
gpt4 key购买 nike

在扩展SipAccount类的类中,我经常收到onRegState()回调,我注意到在稍后几次回调(例如第4或第5次)崩溃几次之后,它崩溃了。

这是onRegState()回调中的代码

 @Override
public void onRegState(OnRegStateParam prm)
{
Log.d(TAG, "onRegState...");
PresenceStatus prsenStatus = new PresenceStatus();

if (prm.getCode().swigValue()/100 == 2)
{
Log.d(TAG, "Going online!");
listener.onLogIn(true);
prsenStatus.setStatus(pjsua_buddy_status.PJSUA_BUDDY_STATUS_ONLINE);
}
else
{
Log.d(TAG, "Going offline!");
listener.onLogIn(false);
prsenStatus.setStatus(pjsua_buddy_status.PJSUA_BUDDY_STATUS_OFFLINE);
}

try
{

sipAccount.setOnlineStatus(prsenStatus);

}
catch (Exception e)
{
e.printStackTrace();
}

}


这是来自pjsip客户端的日志。

06-21 12:37:16.172 10428-10645/com.safarifone.waafi A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 10645 (Thread-3816)
06-21 12:37:16.279 184-184/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
06-21 12:37:16.279 184-184/? I/DEBUG: Build fingerprint: 'google/occam/mako:5.1.1/LMY48T/2237560:user/release-keys'
06-21 12:37:16.279 184-184/? I/DEBUG: Revision: '11'
06-21 12:37:16.279 184-184/? I/DEBUG: ABI: 'arm'
06-21 12:37:16.279 184-184/? I/DEBUG: pid: 10428, tid: 10645, name: Thread-3816 >>> com.safarifone.waafi <<<
06-21 12:37:16.279 184-184/? I/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
06-21 12:37:16.374 184-184/? I/DEBUG: r0 00000000 r1 00002995 r2 00000006 r3 00000000
06-21 12:37:16.374 184-184/? I/DEBUG: r4 a2950dd8 r5 00000006 r6 0000000b r7 0000010c
06-21 12:37:16.374 184-184/? I/DEBUG: r8 b89629b8 r9 b89629b8 sl b6e66155 fp a29502a4
06-21 12:37:16.374 184-184/? I/DEBUG: ip 00002995 sp a2950238 lr b6e66989 pc b6e8be24 cpsr 600f0010
06-21 12:37:16.375 184-184/? I/DEBUG: backtrace:
06-21 12:37:16.375 184-184/? I/DEBUG: #00 pc 0003be24 /system/lib/libc.so (tgkill+12)
06-21 12:37:16.375 184-184/? I/DEBUG: #01 pc 00016985 /system/lib/libc.so (pthread_kill+52)
06-21 12:37:16.375 184-184/? I/DEBUG: #02 pc 00017597 /system/lib/libc.so (raise+10)
06-21 12:37:16.375 184-184/? I/DEBUG: #03 pc 00013d3d /system/lib/libc.so (__libc_android_abort+36)
06-21 12:37:16.375 184-184/? I/DEBUG: #04 pc 000124ec /system/lib/libc.so (abort+4)
06-21 12:37:16.376 184-184/? I/DEBUG: #05 pc 00464d10 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (__gnu_cxx::__verbose_terminate_handler()+348)
06-21 12:37:16.376 184-184/? I/DEBUG: #06 pc 0045e9e4 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (__cxxabiv1::__terminate(void (*)())+8)
06-21 12:37:16.376 184-184/? I/DEBUG: #07 pc 0045ea84 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (std::terminate()+12)
06-21 12:37:16.376 184-184/? I/DEBUG: #08 pc 0045ec10 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (__cxa_throw+156)
06-21 12:37:16.376 184-184/? I/DEBUG: #09 pc 000d6c00 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (SwigDirector_Account::onRegState(pj::OnRegStateParam&)+400)
06-21 12:37:16.376 184-184/? I/DEBUG: #10 pc 0015ef9c /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (pj::Endpoint::on_reg_state2(int, pjsua_reg_info*)+268)
06-21 12:37:16.376 184-184/? I/DEBUG: #11 pc 001996c0 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (regc_cb+1424)
06-21 12:37:16.376 184-184/? I/DEBUG: #12 pc 001dc944 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (call_callback+124)
06-21 12:37:16.376 184-184/? I/DEBUG: #13 pc 001ddc28 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (regc_tsx_callback+2120)
06-21 12:37:16.377 184-184/? I/DEBUG: #14 pc 00225a18 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (mod_util_on_tsx_state+232)
06-21 12:37:16.377 184-184/? I/DEBUG: #15 pc 00221304 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (tsx_set_state+540)
06-21 12:37:16.377 184-184/? I/DEBUG: #16 pc 00224dfc /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (tsx_on_state_proceeding_uac+712)
06-21 12:37:16.377 184-184/? I/DEBUG: #17 pc 002240cc /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (tsx_on_state_calling+656)
06-21 12:37:16.377 184-184/? I/DEBUG: #18 pc 002227a0 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (pjsip_tsx_recv_msg+180)
06-21 12:37:16.377 184-184/? I/DEBUG: #19 pc 002206ac /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (mod_tsx_layer_on_rx_response+232)
06-21 12:37:16.377 184-184/? I/DEBUG: #20 pc 002052b4 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (pjsip_endpt_process_rx_data+696)
06-21 12:37:16.377 184-184/? I/DEBUG: #21 pc 002055d0 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (endpt_on_rx_msg+636)
06-21 12:37:16.377 184-184/? I/DEBUG: #22 pc 0020f6b4 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (pjsip_tpmgr_receive_packet+1908)
06-21 12:37:16.377 184-184/? I/DEBUG: #23 pc 002152e8 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (on_data_read+252)
06-21 12:37:16.378 184-184/? I/DEBUG: #24 pc 00351ce0 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (ioqueue_on_read_complete+208)
06-21 12:37:16.378 184-184/? I/DEBUG: #25 pc 00347a14 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (ioqueue_dispatch_read_event+940)
06-21 12:37:16.378 184-184/? I/DEBUG: #26 pc 0034a1a8 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (pj_ioqueue_poll+1408)
06-21 12:37:16.378 184-184/? I/DEBUG: #27 pc 00204e20 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (pjsip_endpt_handle_events2+328)
06-21 12:37:16.378 184-184/? I/DEBUG: #28 pc 001ae420 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (pjsua_handle_events+92)
06-21 12:37:16.378 184-184/? I/DEBUG: #29 pc 001ab320 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (worker_thread+32)
06-21 12:37:16.378 184-184/? I/DEBUG: #30 pc 0034b9c8 /data/app/com.safarifone.waafi-1/lib/arm/libpjsua2.so (thread_main+176)
06-21 12:37:16.378 184-184/? I/DEBUG: #31 pc 00016173 /system/lib/libc.so (__pthread_start(void*)+30)
06-21 12:37:16.379 184-184/? I/DEBUG: #32 pc 0001409b /system/lib/libc.so (__start_thread+6)

最佳答案

前言

我也在这个问题上苦苦挣扎了几个月,并且在现实世界中的应用使用情况(游戏市场的崩溃)中也遇到了同样的问题。并使用您的代码来处理注册结果。

困难之处在于,我们无法在任何设备上进行测试时遇到该问题,但我们的用户每1000次安装大约有500次崩溃(非常高)。

最初,我是通过UI线程处理Pjsip的,然后我尝试为Pjsip创建自己的线程(使用uaConfig.setThreadCnt(0)和uaConfig.setMainThreadOnly(true)),但是它根本无法正常工作,或者我没有知道如何正确执行此操作,任何地方都没有任何线索。然后,我将所有业务逻辑从UI移到工作线程,并从工作线程使用Pjsip。没有任何帮助,问题是相同的。

终于在昨天,我们能够捕获到此问题,同时我们将Pjsip日志设置为第9级。

这是此崩溃的完整日志,带有先前的信息(出于明显的原因,我替换了实际的服务器凭据):

09-07 19:27:49.475 25309-25328/? I/System.out: 19:27:49.474 sip_endpoint.c  .Module "mod-pjsua-log" registered
09-07 19:27:49.475 25309-25328/? I/System.out: 19:27:49.475 sip_endpoint.c .Module "mod-tsx-layer" registered
09-07 19:27:49.475 25309-25328/? I/System.out: 19:27:49.475 sip_endpoint.c .Module "mod-stateful-util" registered
09-07 19:27:49.475 25309-25328/? I/System.out: 19:27:49.475 sip_endpoint.c .Module "mod-ua" registered
09-07 19:27:49.475 25309-25328/? I/System.out: 19:27:49.475 sip_endpoint.c .Module "mod-100rel" registered
09-07 19:27:49.475 25309-25328/? I/System.out: 19:27:49.475 sip_endpoint.c .Module "mod-pjsua" registered
09-07 19:27:49.475 25309-25328/? I/System.out: 19:27:49.475 sip_endpoint.c .Module "mod-invite" registered
09-07 19:27:49.475 25309-25328/? I/System.out: 19:27:49.475 android_jni_de ..Android JNI sound library initialized
09-07 19:27:49.475 25309-25328/? I/System.out: 19:27:49.475 pjlib ..select() I/O Queue created (0xd1f53214)
09-07 19:27:49.476 25309-25328/? I/System.out: 19:27:49.476 conference.c ..Creating conference bridge with 12 ports
09-07 19:27:49.476 25309-25328/? I/System.out: 19:27:49.476 Master/sound ..Using delay buffer with WSOLA.
09-07 19:27:49.477 25309-25328/? I/System.out: 19:27:49.477 pjsua_vid.c ..Initializing video subsystem..
09-07 19:27:49.478 25309-25328/? I/System.out: 19:27:49.477 openh264.cpp ...OpenH264 codec initialized
09-07 19:27:49.478 25309-25328/? I/System.out: 19:27:49.478 opengl_dev.c ...OpenGL device initialized
09-07 19:27:49.489 25309-25328/? I/System.out: 19:27:49.489 android_dev.c ...Android video capture initialized with 0 device(s):
09-07 19:27:49.489 25309-25328/? I/System.out: 19:27:49.489 colorbar_dev.c ...Colorbar video src initialized with 2 device(s):
09-07 19:27:49.489 25309-25328/? I/System.out: 19:27:49.489 colorbar_dev.c ... 0: Colorbar generator
09-07 19:27:49.489 25309-25328/? I/System.out: 19:27:49.489 colorbar_dev.c ... 1: Colorbar-active
09-07 19:27:49.489 25309-25328/? I/System.out: 19:27:49.489 sip_endpoint.c .Module "mod-evsub" registered
09-07 19:27:49.490 25309-25328/? I/System.out: 19:27:49.490 sip_endpoint.c .Module "mod-presence" registered
09-07 19:27:49.490 25309-25328/? I/System.out: 19:27:49.490 evsub.c .Event pkg "presence" registered by mod-presence
09-07 19:27:49.490 25309-25328/? I/System.out: 19:27:49.490 sip_endpoint.c .Module "mod-mwi" registered
09-07 19:27:49.490 25309-25328/? I/System.out: 19:27:49.490 evsub.c .Event pkg "message-summary" registered by mod-mwi
09-07 19:27:49.490 25309-25328/? I/System.out: 19:27:49.490 sip_endpoint.c .Module "mod-refer" registered
09-07 19:27:49.490 25309-25328/? I/System.out: 19:27:49.490 evsub.c .Event pkg "refer" registered by mod-refer
09-07 19:27:49.490 25309-25328/? I/System.out: 19:27:49.490 sip_endpoint.c .Module "mod-pjsua-pres" registered
09-07 19:27:49.491 25309-25328/? I/System.out: 19:27:49.491 sip_endpoint.c .Module "mod-pjsua-im" registered
09-07 19:27:49.492 25309-25328/? I/System.out: 19:27:49.491 sip_endpoint.c .Module "mod-pjsua-options" registered
09-07 19:27:49.492 25309-25328/? I/System.out: 19:27:49.492 pjsua_core.c .1 SIP worker threads created
09-07 19:27:49.492 25309-25328/? I/System.out: 19:27:49.492 pjsua_core.c .pjsua version 2.6-svn for Linux-3.10.73/armv8l initialized
09-07 19:27:49.492 25309-25328/? I/System.out: 19:27:49.492 pjsua_core.c .PJSUA state changed: CREATED --> INIT
09-07 19:27:49.496 25309-25328/? I/System.out: 19:27:49.496 pjsua_core.c SIP UDP socket reachable at 192.168.0.102:49790
09-07 19:27:49.496 25309-25328/? I/System.out: 19:27:49.496 udp0xc5e8bc00 SIP UDP transport started, published address is 192.168.0.102:49790
09-07 19:27:49.499 25309-25328/? I/System.out: 19:27:49.499 tcptp:39629 SIP TCP listener ready for incoming connections at 192.168.0.102:39629
09-07 19:27:49.499 25309-25328/? I/System.out: 19:27:49.499 pjsua_core.c PJSUA state changed: INIT --> STARTING
09-07 19:27:49.499 25309-25328/? I/System.out: 19:27:49.499 sip_endpoint.c .Module "mod-unsolicited-mwi" registered
09-07 19:27:49.499 25309-25328/? I/System.out: 19:27:49.499 pjsua_core.c .PJSUA state changed: STARTING --> RUNNING
09-07 19:27:49.523 25309-25328/? I/System.out: 19:27:49.523 pjsua_acc.c Adding account: id=sip:user85@192.168.0.1:5065;transport=tcp
09-07 19:27:49.523 25309-25328/? I/System.out: 19:27:49.523 pjsua_acc.c .Account sip:user85@192.168.0.1:5065;transport=tcp added with id 0
09-07 19:27:49.523 25309-25328/? I/System.out: 19:27:49.523 pjsua_acc.c .Acc 0: setting registration..
09-07 19:27:49.524 25309-25328/? I/System.out: 19:27:49.524 tcpc0xc8004414 ..TCP client transport created
09-07 19:27:49.525 25309-25328/? I/System.out: 19:27:49.525 tcpc0xc8004414 ..TCP transport 192.168.0.102:43292 is connecting to 192.168.0.1:5065...
09-07 19:27:49.525 25309-25328/? I/System.out: 19:27:49.525 pjsua_acc.c ..Contact for acc 0 updated: <sip:user85@192.168.0.102:43292;transport=TCP;ob>;reg-id=1;+sip.instance="<urn:uuid:00000000-0000-0000-0000-0000e922f243>"
09-07 19:27:49.526 25309-25328/? I/System.out: 19:27:49.526 endpoint ..Request msg REGISTER/cseq=27093 (tdta0xf2abe064) created.
09-07 19:27:49.526 25309-25328/? I/System.out: 19:27:49.526 tsx0xc5189864 ...Transaction created for Request msg REGISTER/cseq=27094 (tdta0xf2abe064)
09-07 19:27:49.526 25309-25328/? I/System.out: 19:27:49.526 tsx0xc5189864 ..Sending Request msg REGISTER/cseq=27094 (tdta0xf2abe064) in state Null
09-07 19:27:49.527 25309-25328/? I/System.out: 19:27:49.526 sip_resolve.c ...Target '192.168.0.1:5065' type=TCP resolved to '192.168.0.1:5065' type=TCP (TCP transport)
09-07 19:27:49.527 25309-25328/? I/System.out: 19:27:49.527 pjsua_core.c ...TX 670 bytes Request msg REGISTER/cseq=27094 (tdta0xf2abe064) to TCP 192.168.0.1:5065:
09-07 19:27:49.527 25309-25328/? I/System.out: REGISTER sip:192.168.0.1:5065;transport=tcp SIP/2.0
09-07 19:27:49.527 25309-25328/? I/System.out: Via: SIP/2.0/TCP 192.168.0.102:43292;rport;branch=z9hG4bKPjF2B-OwmauIYhdNKR-ZgJx.-1MSDez4W6;alias
09-07 19:27:49.527 25309-25328/? I/System.out: Max-Forwards: 70
09-07 19:27:49.527 25309-25328/? I/System.out: From: <sip:user85@192.168.0.1>;tag=4qxB-NvGjIr6mYvHsTZodmy3jlZbSaId
09-07 19:27:49.527 25309-25328/? I/System.out: To: <sip:user85@192.168.0.1>
09-07 19:27:49.527 25309-25328/? I/System.out: Call-ID: C5IqW1iZ3iPJDNHNPtQnk0L-9IoX3iUs
09-07 19:27:49.527 25309-25328/? I/System.out: CSeq: 27094 REGISTER
09-07 19:27:49.527 25309-25328/? I/System.out: User-Agent: Pjsua2 Android 2.6-svn
09-07 19:27:49.527 25309-25328/? I/System.out: Supported: outbound, path
09-07 19:27:49.527 25309-25328/? I/System.out: Contact: <sip:user85@192.168.0.102:43292;transport=TCP;ob>;reg-id=1;+sip.instance="<urn:uuid:00000000-0000-0000-0000-0000e922f243>"
09-07 19:27:49.527 25309-25328/? I/System.out: Expires: 300
09-07 19:27:49.527 25309-25328/? I/System.out: Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
09-07 19:27:49.527 25309-25328/? I/System.out: Content-Length: 0
09-07 19:27:49.527 25309-25328/? I/System.out: --end msg--
09-07 19:27:49.527 25309-25328/? I/System.out: 19:27:49.527 tsx0xc5189864 ...State changed from Null to Calling, event=TX_MSG
09-07 19:27:49.527 25309-25328/? I/System.out: 19:27:49.527 pjsua_acc.c ..Acc 0: Registration sent
09-07 19:27:49.629 25309-25449/? I/System.out: 19:27:49.628 tcpc0xc8004414 !TCP connect() error: Connection refused [code=120111]
09-07 19:27:49.631 25309-25449/? I/System.out: 19:27:49.629 tsx0xc5189864 Failed to send Request msg REGISTER/cseq=27094 (tdta0xf2abe064)! err=120111 (Connection refused)
09-07 19:27:49.632 25309-25449/? I/System.out: 19:27:49.631 tsx0xc5189864 State changed from Calling to Terminated, event=TRANSPORT_ERROR
09-07 19:27:49.634 25309-25449/? I/System.out: 19:27:49.633 pjsua_acc.c ..SIP registration failed, status=503 (Connection refused)
09-07 19:27:49.635 25309-25449/? I/System.out: 19:27:49.634 pjsua_acc.c ..Scheduling re-registration retry for acc 0 in 7 seconds..
09-07 19:27:49.900 25453-25449/? A/google-breakpad: Microdump skipped (uninteresting)
09-07 19:27:49.930 25309-25449/? W/google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ###
09-07 19:27:49.930 25309-25449/? W/google-breakpad: Chrome build fingerprint:
09-07 19:27:49.930 25309-25449/? W/google-breakpad: 10
09-07 19:27:49.930 25309-25449/? W/google-breakpad: 10
09-07 19:27:49.930 25309-25449/? W/google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ###
09-07 19:27:49.933 25309-25449/? A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 25449 (Thread-18)

[ 09-07 19:27:49.940 16075:16075 W/ ]
debuggerd: handling request: pid=25309 uid=11700 gid=11700 tid=25449
09-07 19:27:49.970 25454-25454/? W/debuggerd: type=1400 audit(0.0:1124): avc: denied { search } for name="?" dev="dm-2" ino=441666 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0
09-07 19:27:50.050 25454-25454/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
09-07 19:27:50.051 25454-25454/? A/DEBUG: Build fingerprint: 'google/bullhead/bullhead:7.1.2/N2G48C/4104010:user/release-keys'
09-07 19:27:50.051 25454-25454/? A/DEBUG: Revision: 'rev_1.0'
09-07 19:27:50.051 25454-25454/? A/DEBUG: ABI: 'arm'
09-07 19:27:50.051 25454-25454/? A/DEBUG: pid: 25309, tid: 25449, name: Thread-18 >>> ? <<<
09-07 19:27:50.051 25454-25454/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
09-07 19:27:50.051 25454-25454/? A/DEBUG: r0 00000000 r1 00006369 r2 00000006 r3 00000008
09-07 19:27:50.051 25454-25454/? A/DEBUG: r4 c3c01978 r5 00000006 r6 c3c01920 r7 0000010c
09-07 19:27:50.051 25454-25454/? A/DEBUG: r8 c545f7e0 r9 c4022858 sl c3ff8a50 fp ffffffff
09-07 19:27:50.051 25454-25454/? A/DEBUG: ip 00000000 sp c3c01048 lr f47e45e7 pc f47e6e44 cpsr 200f0010
09-07 19:27:50.063 25454-25454/? A/DEBUG: backtrace:
09-07 19:27:50.064 25454-25454/? A/DEBUG: #00 pc 00049e44 /system/lib/libc.so (tgkill+12)
09-07 19:27:50.064 25454-25454/? A/DEBUG: #01 pc 000475e3 /system/lib/libc.so (pthread_kill+34)
09-07 19:27:50.064 25454-25454/? A/DEBUG: #02 pc 0001d8a5 /system/lib/libc.so (raise+10)
09-07 19:27:50.064 25454-25454/? A/DEBUG: #03 pc 000193f1 /system/lib/libc.so (__libc_android_abort+34)
09-07 19:27:50.064 25454-25454/? A/DEBUG: #04 pc 00017034 /system/lib/libc.so (abort+4)
09-07 19:27:50.064 25454-25454/? A/DEBUG: #05 pc 001309af /data/app/?-1/lib/arm/libpjsua2.so (_ZN9__gnu_cxx27__verbose_terminate_handlerEv+226)
09-07 19:27:50.064 25454-25454/? A/DEBUG: #06 pc 0012b665 /data/app/?-1/lib/arm/libpjsua2.so (_ZN10__cxxabiv111__terminateEPFvvE+4)
09-07 19:27:50.064 25454-25454/? A/DEBUG: #07 pc 0012b6d9 /data/app/?-1/lib/arm/libpjsua2.so (_ZSt9terminatev+8)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #08 pc 0012b7fd /data/app/?-1/lib/arm/libpjsua2.so (__cxa_throw+120)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #09 pc 0006cfe3 /data/app/?-1/lib/arm/libpjsua2.so (_ZN20SwigDirector_Account10onRegStateERN2pj15OnRegStateParamE+186)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #10 pc 00091a53 /data/app/?-1/lib/arm/libpjsua2.so (_ZN2pj8Endpoint13on_reg_state2EiP14pjsua_reg_info+110)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #11 pc 000a8771 /data/app/?-1/lib/arm/libpjsua2.so (regc_cb+1092)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #12 pc 000c0c81 /data/app/?-1/lib/arm/libpjsua2.so (regc_tsx_callback+1368)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #13 pc 000d5223 /data/app/?-1/lib/arm/libpjsua2.so (tsx_set_state+190)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #14 pc 000d607b /data/app/?-1/lib/arm/libpjsua2.so (send_msg_callback+446)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #15 pc 000cdb09 /data/app/?-1/lib/arm/libpjsua2.so (stateless_send_transport_cb+68)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #16 pc 000d0291 /data/app/?-1/lib/arm/libpjsua2.so (transport_send_callback+20)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #17 pc 000d21fb /data/app/?-1/lib/arm/libpjsua2.so (on_data_sent+38)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #18 pc 000d24fb /data/app/?-1/lib/arm/libpjsua2.so (on_connect_complete+82)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #19 pc 00122e3d /data/app/?-1/lib/arm/libpjsua2.so (ioqueue_dispatch_write_event+124)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #20 pc 00123c03 /data/app/?-1/lib/arm/libpjsua2.so (pj_ioqueue_poll+462)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #21 pc 000cd519 /data/app/?-1/lib/arm/libpjsua2.so (pjsip_endpt_handle_events2+90)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #22 pc 000ae505 /data/app/?-1/lib/arm/libpjsua2.so (pjsua_handle_events+32)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #23 pc 000ae529 /data/app/?-1/lib/arm/libpjsua2.so (worker_thread+16)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #24 pc 0012453d /data/app/?-1/lib/arm/libpjsua2.so (thread_main+40)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #25 pc 000470b3 /system/lib/libc.so (_ZL15__pthread_startPv+22)
09-07 19:27:50.065 25454-25454/? A/DEBUG: #26 pc 00019e3d /system/lib/libc.so (__start_thread+6)


如您所见,库在收到“拒绝连接”错误并计划下一次重试(根据日志)后立即崩溃。
因此,我们进行了测试以证明该建议-我们将SIP服务器配置为拒绝任何连接,然后我们就知道了!
因此,当出现连接错误时出现问题。

牢记这一点,我在onRegState()回调中放置了一个断点。我再次尝试并击中断点,然后释放它,应用崩溃了。然后我在方法中注释掉了我的代码,然后再次尝试:断点命中,释放并...没有崩溃
这很奇怪,因为我的逻辑很轻松,并且对Pjsip本身不做任何事情。

然后,我放了一条日志,找出回调正在运行哪个线程,并且……感到惊讶!

答案(TL; DR)(mb原因不正确)

onRegState()回调方法在它内部创建的Pjsip线程之一中运行。
因此,一旦我通过将代码调用发布到我的工作线程中替换了对代码的调用,崩溃便消失了。看起来Pjsip正在等待所有回调方法尽早返回,并不意味着它们会延迟任何时间。

因此,我建议使用Runnable从那里包装对您的代码的调用,并将其发布到Handler(无论是UI线程还是您自己的工作线程),然后崩溃将不复存在。
我还没有测试其他Pjsip回调线程-它们是否也是内部Pjsip线程?但是我很确定它们是这样,并且计划以相同的方式将所有调用从任何Pjsip回调中包装到我的代码中(Runnable->发布到Hadler)

因此,您的代码可能看起来像这样来解决问题:

@Override
public void onRegState(OnRegStateParam prm) {
Log.d(TAG, "onRegState...");

final int stateCode = prm.getCode().swigValue();

mHandler.post(new Runnable() {
@Override
public void run() {
PresenceStatus prsenStatus = new PresenceStatus();

if (stateCode /100 == 2) {
Log.d(TAG, "Going online!");
listener.onLogIn(true);
prsenStatus.setStatus(pjsua_buddy_status.PJSUA_BUDDY_STATUS_ONLINE);
} else {
Log.d(TAG, "Going offline!");
listener.onLogIn(false);
prsenStatus.setStatus(pjsua_buddy_status.PJSUA_BUDDY_STATUS_OFFLINE);
}

try {
sipAccount.setOnlineStatus(prsenStatus);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}


其中mHandler是您用于在某处创建的Pjsip的线程的处理程序。或者您可以使用任何其他解决方案,将这种方法从任何工作分担给线程...

更新资料


我检查并发现,所有Pjsip回调都在由库创建的线程中运行。除了对呼叫的onCallState(OnCallStateParam prm)的第一次呼叫。第一次在创建该调用的同一线程中调用它,但是下次调用在Pjsip创建的不同线程上发生,每次调用一个新线程。
我发现以前我为注册失败抛出了一个新的RuntimeException。因此实际上,此崩溃是由此回调执行的代码中意外的异常导致的。


因此,Pjsip线程中的异常导致本机库崩溃。

更新的答案

我得出的结论是,当回调(在回调线程中)执行的代码中出现意外的Exception时,库崩溃。

但我建议使用相同的解决方案:

不要在回调中运行任何业务逻辑,而是将其发布到您的线程中

因此,您将两者都:


防止库回调缓冲区和逻辑线程(UI,工作程序等)之间的竞争状况
并防止这种神秘的崩溃在库中,获得良好的旧Java异常=)

关于android - Pjsip在RegState回调中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44676012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com