Linux分离线程问题

问题:
在打开camera过程中执行调用log_monitor_thread_init过程中创建log_monitor_thread_proc出现问题导致crash.
C3AC38A  07-03 08:34:36.482  8924  8924 F DEBUG   : signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
C3AC38B  07-03 08:34:36.482  8924  8924 F DEBUG   : Abort message: 'invalid pthread_t 0xe503e1c0 passed to pthread_setname_np'

C3AC3A5  07-03 08:34:36.512  8924  8924 F DEBUG   : backtrace:
C3AC3A6  07-03 08:34:36.512  8924  8924 F DEBUG   :       #00 pc 00038300  /apex/com.android.runtime/lib/bionic/libc.so (abort+172) (BuildId: 29d129f5e3950af1f282b1036b38d770)
C3AC3A7  07-03 08:34:36.512  8924  8924 F DEBUG   :       #01 pc 000806cf  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_internal_find(long, char const*)+98) (BuildId: 29d129f5e3950af1f282b1036b38d770)
C3AC3A8  07-03 08:34:36.512  8924  8924 F DEBUG   :       #02 pc 0008065b  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_internal_gettid(long, char const*)+2) (BuildId: 29d129f5e3950af1f282b1036b38d770)
C3AC3A9  07-03 08:34:36.512  8924  8924 F DEBUG   :       #03 pc 00082321  /apex/com.android.runtime/lib/bionic/libc.so (pthread_setname_np+112) (BuildId: 29d129f5e3950af1f282b1036b38d770)
C3AC3AA  07-03 08:34:36.512  8924  8924 F DEBUG   :       #04 pc 0008ef8b  /vendor/lib/hw/camera.xxxxx.so (sprdcamera::SprdCamera3OEMIf::log_monitor_thread_init(void*)+126) (BuildId: 8fa92e7c0bee051bf6d73f62c9e7b56d)
主要原因为:
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    ret = pthread_create(&obj->mLogHandle, &attr,
                          log_monitor_thread_proc, (void *)obj);
    pthread_setname_np(obj->mLogHandle, "logstatus");
    pthread_attr_destory(&attr);

使用分离线程方式创建,这种线程运行很快,而mLogMonitor打印为0,while循环不执行,该log_monitor_thread_proc立即退出,后续pthread_setname_np就可能出现非法地址。
M3AC194  07-03 08:34:36.418   474  8918 I Cam3OEMIf: 10884, log_monitor_thread_proc: E, 0
源码:   HAL_LOGI("E, %d",mLogMonitor.load());
	  while(mLogMonitor.load() > 1) {
          ......
        }
>>signal非法地址
C3AC38A  07-03 08:34:36.482  8924  8924 F DEBUG   : signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
C3AC38B  07-03 08:34:36.482  8924  8924 F DEBUG   : Abort message: 'invalid pthread_t 0xe503e1c0 passed to pthread_setname_np'
解决方法:
PTHREAD_CREATE_DETACHED 分离线程创建的线程处理函数log_monitor_thread_proc是不能立即结束的。
(1)可以把 pthread_setname_np(obj->mLogHandle, "logstatus"); 这行去掉;
(2)或者确定 log_monitor_thread_proc 不会立即退出;
(3)或者增加自旋锁;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值