pthread_mutex_unlock()出错

  出外转了一圈,回来看到崩溃:

Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./gh_manager thread false 1'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  __pthread_mutex_unlock_usercnt (decr=1, mutex=0x0)
    at pthread_mutex_unlock.c:313
313	pthread_mutex_unlock.c: 没有那个文件或目录.
[Current thread is 1 (Thread 0x7f3a67113700 (LWP 31273))]
(gdb) backtrace
#0  __pthread_mutex_unlock_usercnt (decr=1, mutex=0x0)
    at pthread_mutex_unlock.c:313
#1  __GI___pthread_mutex_unlock (mutex=0x0) at pthread_mutex_unlock.c:314

  意思就是说,pthread_mutex_unlock出错了,传递的参数为NULL。嗯?这怎么可能?到处是成对出现。唯一的可能性:

  (函数1)unlock,(函数2)lock,(函数1)delete,(函数2)unlock。

  故修改函数1如下:

void H264Writer::end()
{
	if (h264_mutex == NULL)
	{
		return;
	}

    pthread_mutex_lock(h264_mutex);

    ......

    //避免别的地方见缝插针。
    pthread_mutex_t* temp_mutex = h264_mutex;
    h264_mutex = NULL;
    pthread_mutex_unlock(temp_mutex);
    delete temp_mutex;
}

猜你喜欢

转载自blog.csdn.net/quantum7/article/details/88078131
今日推荐