2E7F63 06-01 17:39:19.760 2737 2737 F libc : invalid pthread_t 0xccf3b970 passed to libc
2E7F7C 06-01 17:39:19.764 2737 2737 F libc : Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 2737 (baidu.appsearch), pid 2737 (baidu.appsearch)
2E806F 06-01 17:39:19.994 3364 3364 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2E8070 06-01 17:39:19.994 3364 3364 F DEBUG : Native Crash TIME: 113131087
2E8071 06-01 17:39:19.994 3364 3364 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2E8072 06-01 17:39:19.994 3364 3364 F DEBUG : Build fingerprint: 'Itel/F6308/itel-L6002P:9/PPR1.180610.011/OP-V009-20190529:user/release-keys'
2E8073 06-01 17:39:19.994 3364 3364 F DEBUG : Revision: '0'
2E8074 06-01 17:39:19.994 3364 3364 F DEBUG : ABI: 'arm'
2E8075 06-01 17:39:19.994 3364 3364 F DEBUG : pid: 2737, tid: 2737, name: baidu.appsearch >>> com.baidu.appsearch <<<
2E8076 06-01 17:39:19.994 3364 3364 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
2E8077 06-01 17:39:19.995 3364 3364 F DEBUG : Abort message: 'invalid pthread_t 0xccf3b970 passed to libc'
2E8078 06-01 17:39:19.995 3364 3364 F DEBUG : r0 00000000 r1 00000ab1 r2 00000006 r3 00000008
2E8079 06-01 17:39:19.995 3364 3364 F DEBUG : r4 00000ab1 r5 00000ab1 r6 ffd31f14 r7 0000010c
2E807A 06-01 17:39:19.995 3364 3364 F DEBUG : r8 00000000 r9 c5601928 r10 ffd320c8 r11 ffd32054
2E807B 06-01 17:39:19.995 3364 3364 F DEBUG : ip 00000041 sp ffd31f00 lr eff3206d pc eff29d96
2E807E 06-01 17:39:20.009 3364 3364 F DEBUG :
06-01 17:39:20.009 3364 3364 F DEBUG : backtrace:
2E807F 06-01 17:39:20.009 3364 3364 F DEBUG : #00 pc 0001cd96 /system/lib/libc.so (abort+58)
2E8080 06-01 17:39:20.009 3364 3364 F DEBUG : #01 pc 00064771 /system/lib/libc.so (__pthread_internal_find(long)+104)
2E8081 06-01 17:39:20.009 3364 3364 F DEBUG : #02 pc 000647ad /system/lib/libc.so (pthread_join+28)
2E8082 06-01 17:39:20.009 3364 3364 F DEBUG : #03 pc 00011d61 /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/libcyber-sdl.so
2E8083 06-01 17:39:20.009 3364 3364 F DEBUG : #04 pc 0002e58d /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/libcyber-player.so
2E8084 06-01 17:39:20.009 3364 3364 F DEBUG : #05 pc 0002ffa3 /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/libcyber-player.so
2E8085 06-01 17:39:20.009 3364 3364 F DEBUG : #06 pc 000385c5 /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/libcyber-player.so
2E8086 06-01 17:39:20.009 3364 3364 F DEBUG : #07 pc 0003c4e1 /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/libcyber-player.so
2E8087 06-01 17:39:20.009 3364 3364 F DEBUG : #08 pc 0000073b /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/oat/arm/cyber-media-dex.odex (offset 0x2000)
2E8A8A 06-01 17:39:35.875 3414 3746 F libc : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x69646e7d in tid 3746 (Thread-63), pid 3414 (baidu.appsearch)
2E8A8F 06-01 17:39:36.063 3922 3922 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
https://www.jianshu.com/p/348d6aa63feb
一、Android 8.0遇到的问题
1. 线程中断:
- 描述:软件中一个长期挂载执行的命令轮询线程,中断了
- 原因:Android 8.0判断软件处于未活跃状态,会释放软件持有的所有Wake Lock,恰巧线程中调用Lock.wait,同步锁,被系统唤醒后,线程结束
- 处理:增加运行标签,重新启动线程机制,增加sleep机制
2. invalid pthread_t 0x2243df2546 passed to libc
- 描述: 在JNI运行中报错,invalid pthread_t passed to libc,查看代码发现,在调用pthread_join()方法时报错
- 原因:
- 检测到线程队列指针为空的情况下还去调用分离线程会出现异常,在pthread_join中会调用__pthread_internal_find,https://github.com/aosp-mirror/platform_bionic/blob/master/libc/bionic/pthread_join.cpp
- 在__pthread_internal_find方法时https://github.com/aosp-mirror/platform_bionic/blob/master/libc/bionic/pthread_internal.cpp
- 处理:经检测发现,由于c++代码中不严谨的写法导致了该问题,未启动线程(未传入线程指针)前,调用了pthread_join的方法,在以前的版本中,软件没有崩溃,所以没有检测到,修改后无问题
解决方法:
获取当前系统版本,大于等于26的话,不再调用 pthread_detach