异常log:
09-16 14:07:11.613 395 395 W ActivityThread: performDestroyActivity
09-16 14:07:11.613 395 395 D SinkActivity: SinkActivity::onDestroy
09-16 14:07:11.613 395 395 V SinkActivity: miracast thread quit
09-16 14:07:11.617 395 430 W libEGL : EGLNativeWindowType 0x9e4e9008 disconnect failed
09-16 14:07:11.618 395 895 F libc : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x8bf51684 in tid 895 (SinkActivity-Mi), pid 395 (om.tcl.miracast)
错误堆栈信息:看不出啥问题
09-16 14:07:11.836 1005 1005 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
09-16 14:07:11.836 1005 1005 F DEBUG : Build fingerprint: 'TCL/BeyondTV6/BeyondTV4:9/PPR1.180610.011/AP04:userdebug/release-keys'
09-16 14:07:11.836 1005 1005 F DEBUG : Revision: '0'
09-16 14:07:11.836 1005 1005 F DEBUG : ABI: 'arm'
09-16 14:07:11.836 1005 1005 F DEBUG : pid: 395, tid: 895, name: SinkActivity-Mi >>> com.tcl.miracast <<<
09-16 14:07:11.836 1005 1005 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x8bf51684
09-16 14:07:11.836 1005 1005 F DEBUG : r0 a5c66c40 r1 8c28f9d0 r2 8bf51684 r3 00000001
09-16 14:07:11.836 1005 1005 F DEBUG : r4 00000003 r5 8c28f970 r6 0000000c r7 a5eb202c
09-16 14:07:11.837 1005 1005 F DEBUG : r8 00000000 r9 a5eb202c r10 a5eb202c r11 00000004
09-16 14:07:11.837 1005 1005 F DEBUG : ip a5eaa638 sp 8c28f910 lr a5e6de67 pc 8bf51684
09-16 14:07:11.844 1005 1005 F DEBUG :
09-16 14:07:11.844 1005 1005 F DEBUG : backtrace:
09-16 14:07:11.844 1005 1005 F DEBUG : #00 pc 8bf51684 <unknown>
09-16 14:07:11.844 1005 1005 F DEBUG : #01 pc 00063e65 /system/lib/libc.so (pthread_key_clean_all()+68)
09-16 14:07:11.844 1005 1005 F DEBUG : #02 pc 00063aab /system/lib/libc.so (pthread_exit+44)
09-16 14:07:11.844 1005 1005 F DEBUG : #03 pc 000639e7 /system/lib/libc.so (__pthread_start(void*)+24)
09-16 14:07:11.845 1005 1005 F DEBUG : #04 pc 0001df75 /system/lib/libc.so (__start_thread+22)
分析:
895线程是在SinkActivity主线程中开启的jni线程,此线程使用了dlopen、dlsym、dlclose等函数加载so库以及函数调用等。
在SinkActivity销毁时报上述crash,有在SinkActivity生命周期中添加log,发现从onPause到onDestroy都是正常打印的。
排查修改发现是在jni线程销毁,某类析构函数中调用了dlclose释放so库,导致此问题,去掉dlclose就ok。
具体原理未知,迷惑中。。。。