在快速连续删除来电和帐号时,我在Android上遇到PJSUA(Swig)崩溃。
以下是Android应用程序视角的场景:
删除电话和帐户:
call.delete();
call = null;
account.delete();
account = null;
应用程序崩溃:
Fatal signal 11 (SIGSEGV) at 0x3a302063 (code=1), thread 28956 (com.sampleapp) *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: 'google/nakasi/grouper:4.2.2/JDQ39/573038:user/release-keys' Revision: '0' pid: 28926, tid: 28956, name: com.sampleapp >>> com.sampleapp <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 3a302063 r0 3a302063 r1 00000007 r2 61f1c9a0 r3 3a302063 r4 00000001 r5 61ee805c r6 61eea08c r7 58cdf7c4 r8 68b5e360 r9 00100000 sl 58cdf7c4 fp 68e3ce84 ip 00000001 sp 68e3ce78 lr 689520b8 pc 68951bc8 cpsr 60000010 d0 000000000062e080 d1 3ff000004280cccd d2 0000001c0000001b d3 0001000100010001 d4 ff00550055005500 d5 00000131000f000f d6 4034346dc5d63900 d7 0062e0808f5c28f6 d8 0000000000000000 d9 0000000000000000 d10 0000000000000000 d11 0000000000000000 d12 0000000000000000 d13 0000000000000000 d14 0000000000000000 d15 0000000000000000 d16 4158b82020000000 d17 3fe0000000000000 d18 0000000000000000 d19 002bf000002ad000 d20 0070c01d006c401c d21 0079c01f0075401e d22 0000000000000004 d23 0000002300000022 d24 0082c021007e4020 d25 008bc02300874022 d26 000000200000001f d27 0000002200000021 d28 0070c000006c4000 d29 0079c00000754000 d30 0000000100000001 d31 0000000100000001 scr 80000090 backtrace: #00 pc 0008dbc8 /data/app-lib/com.sampleapp-2/libpjsua2.so (_JavaVM::DetachCurrentThread()+20) #01 pc 0008e0b4 /data/app-lib/com.sampleapp-2/libpjsua2.so (Swig::Director::JNIEnvWrapper::~JNIEnvWrapper()+48) #02 pc 00093fdc /data/app-lib/com.sampleapp-2/libpjsua2.so (SwigDirector_Call::onCallState(pj::OnCallStateParam&)+384)
这是重现问题的最简单方法,但在其他情况下,删除通话和帐户会导致同样的崩溃。
我已经调试了很多,我认为问题是在通话结束时删除帐户会导致崩溃。
如果我只关闭通话并且稍后(2秒就足够了)关闭帐户,则不会发生崩溃。
我做错了吗?有没有办法防止这次崩溃?