RFR: 8032901: WaitForMultipleObjects() return value not handled appropriately

David Holmes david.holmes at oracle.com
Tue May 13 22:46:19 UTC 2014


Hi Aleksej,

Thanks for the doc references regarding abandonment.

Let me rephrase my question. What is this logic trying to achieve by 
waiting on both a mutex and an event? Do we already own the mutex when 
this function is called?

David

On 13/05/2014 11:19 PM, Aleksej Efimov wrote:
> David,
>
> The Windows has a different terminology for mutex objects (much differs
> from the POSIX one). This one link gave me some understanding of it [1].
>
> Here is the MSDN [1] description of what "abandoned mutex" is:
> " If a thread terminates without releasing its ownership of a mutex
> object, the mutex object is considered to be abandoned. A waiting thread
> can acquire ownership of an abandoned mutex object, but the wait
> function will return*WAIT_ABANDONED*to indicate that the mutex object is
> abandoned. An abandoned mutex object indicates that an error has
> occurred and that any shared resource being protected by the mutex
> object is in an undefined state. If the thread proceeds as though the
> mutex object had not been abandoned, it is no longer considered
> abandoned after the thread releases its ownership. This restores normal
> behavior if a handle to the mutex object is subsequently specified in a
> wait function."
>
>
> What does it mean to wait on mutex and ownership of the mutex object:
> "Any thread with a handle to a mutex object can use one of thewait
> functions
> <http://msdn.microsoft.com/en-gb/library/windows/desktop/ms687069%28v=vs.85%29.aspx>to
> request ownership of the mutex object. If the mutex object is owned by
> another thread, the wait function blocks the requesting thread until the
> owning thread releases the mutex object using the*ReleaseMutex*
> <http://msdn.microsoft.com/en-gb/library/windows/desktop/ms685066%28v=vs.85%29.aspx>function."
>
> How we can release mutex and wait on already owned mutex:
> " After a thread obtains ownership of a mutex, it can specify the same
> mutex in repeated calls to the wait-functions
> <http://msdn.microsoft.com/en-gb/library/windows/desktop/ms687069%28v=vs.85%29.aspx>without
> blocking its execution. This prevents a thread from deadlocking itself
> while waiting for a mutex that it already owns. To release its ownership
> under such circumstances, the thread must call*ReleaseMutex*
> <http://msdn.microsoft.com/en-gb/library/windows/desktop/ms685066%28v=vs.85%29.aspx>once
> for each time that the mutex satisfied the conditions of a wait function."
>
> [1]
> http://msdn.microsoft.com/en-gb/library/windows/desktop/ms684266(v=vs.85).aspx
>
> -Aleksej
>
> On 05/13/2014 04:00 PM, David Holmes wrote:
>> I don't understand this one at all. What is an "abandoned mutex"? For
>> that matter why does the code wait on a mutex and an event? Do we
>> already own the mutex? If so what does it mean to wait on it? If not
>> then how can we release it?
>>
>> ???
>>
>> Thanks,
>> David
>>
>>
>> On 13/05/2014 8:57 PM, Alan Bateman wrote:
>>>
>>> This is debugger's shared memory transport so cc'ing serviceability-dev
>>> as that is there this code is maintained.
>>>
>>> Is there a test case or any outline of the conditions that cause this? I
>>> think that would be useful to understand the issue further.
>>>
>>> -Alan
>>>
>>> On 13/05/2014 11:46, Aleksej Efimov wrote:
>>>> Hi,
>>>>
>>>> Can I have a review for 8032901 bug [1] fix [2]. There is a possible
>>>> case when 'WaitForMultipleObjects' function can return the
>>>> WAIT_ABANDONED_0 [3] error value.
>>>> In such case it's better to release the mutex and return error value.
>>>> This will prevent other threads to be blocked on abandoned mutex.
>>>>
>>>> Thank you,
>>>> Aleksej
>>>>
>>>> [1] https://bugs.openjdk.java.net/browse/JDK-8032901
>>>> [2] http://cr.openjdk.java.net/~aefimov/8032901/9/webrev.00/
>>>> [3]
>>>> http://msdn.microsoft.com/en-gb/library/windows/desktop/ms687025(v=vs.85).aspx
>>>>
>>>>
>>>
>



More information about the core-libs-dev mailing list