Subject: [Boost-bugs] [Boost C++ Libraries] #8306: named mutex does not unlock as expected
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-03-18 18:22:56
#8306: named mutex does not unlock as expected
--------------------------------------------------------------------------------+
Reporter: David Hebbeker <david.hebbeker@â¦> | Owner: igaztanaga
Type: Bugs | Status: new
Milestone: To Be Determined | Component: interprocess
Version: Boost 1.52.0 | Severity: Optimization
Keywords: named mutex, named_mutex, semaphore, posix_named_semaphore, unlock |
--------------------------------------------------------------------------------+
{{{named_mutex}}} internally uses a {{{posix_named_semaphore}}} (in file
{{{<boost/interprocess/sync/posix/named_mutex.hpp>}}}). When a mutex is
unlocked (via {{{unlock()}}}) multiple times consecutively a single call
to {{{lock()}}} will not lock the mutex!
In the documentation it says:
> void unlock()
>
> Precondition: The thread must have exclusive ownership of the mutex.
[Boost][[BR]]
This precondition is violated within this scenario. But the expected
precondition is that ''no other thread must have exclusive ownership of
the mutex''. This way a free mutex could be unlocked safely.
The ''expected behaviour'' is that:
> A mutex is a variable that can be in one of two states: unlocked or
locked.
[Tanenbaum][[BR]]
Thus locking an unlocked mutex would definitely lock it. To demonstrate
that this expectation is not fulfilled a minimal program will be attached.
A workaround to securely unlock a {{{named_mutex}}} could be:
{{{
if(mutex.try_lock())
{
mutex.unlock();
}
}}}
This way the mutex will only be unlocked if no other thread holds
ownership of the mutex. Also the mutex will not be unlocked consecutively
in case this snipped is called several times as it would be locked by
{{{try_lock()}}} before. After this snipped the mutex will not be locked
by the calling thread, but still might be locked by an other thread.
A real fix to this issue would probably be to use mutexes (like with
{{{pthread_mutex_unlock}}}) instead of semaphores.
[Tanenbaum] A. S. Tanenbaum, Operating systems: design and implementation,
3rd ed. Upper Saddle River, N.J: Pearson/Prentice Hall, 2006.[[BR]]
[Boost] âSynchronization mechanisms - 1.53.0â. [Online]. Available:
http://www.boost.org/doc/libs/1_53_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.mutexes.mutexes_mutex_operations.
[Accessed: 18-Mar-2013].
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/8306> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:12 UTC