How to avoid deadlock when the called method uses the same lock that the caller already locked?
I have and method called closeUnusedConnections(), that creates a std::unique_lock
but its caller already created a std::unique_lock
with the same std::mutex
: Foo::m_myMutex.
Do I have to release the lock before calling the subroutine?
Obs.: I can't integrate both methods because the closeUnusedConnections is also called independently.
Some code:
void Foo::closeUnusedConnections()
{
std::unique_lock< std::mutex > lock( m_mtx );
// do stuff
}
Foo::CommNodePtr Foo::getConnection()
{
std::unique_lock< std::mutex > lock( m_mtx );
// do stuff
if( true /*some condition*/ )
{
lock.unlock(); // The goal is to avoid this unlock
// someone could get the lock between
// this unlock until closeUnusedConnections's lock.
closeUnusedConnections();
}
// etc
}
Aucun commentaire:
Enregistrer un commentaire