Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pthread_mutex_lock.c:62: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed

I received that error:

pthread_mutex_lock.c:62: __pthread_mutex_lock: Assertion `mutex->_data._owner == 0' failed.

And I cannot found any cause of that. However I'm not sure about the following piece of code:

Declarations:

std::mutex lock;
std::condition_variable cond;

Sequence of locks & unlocks:

std::unique_lock<std::mutex> lk(lock);

cond.wait(lk);

lock.unlock();

If I remove this sequence - everything works fine, but without any protection. I'm not sure if I use unique_lock properly.

like image 545
Dejwi Avatar asked Feb 11 '12 11:02

Dejwi


1 Answers

std::unique_lock and the other locks acquire a mutex in constructor and releases it in destructor. You called lock.unlock() in your code manually, making it being called effectively twice.

After removing that statement your code should work properly.

like image 154
Rafał Rawicki Avatar answered Sep 23 '22 06:09

Rafał Rawicki