RFR: 8145725: Remove the WorkAroundNPTLTimedWaitHang workaround

David Holmes david.holmes at oracle.com
Wed Feb 10 21:19:58 UTC 2016


Thanks for the Review Dan!

David

On 11/02/2016 1:23 AM, Daniel D. Daugherty wrote:
> On 2/8/16 6:17 PM, David Holmes wrote:
>> Hi Dmitry,
>>
>> Great cleanup suggestions. I also did some missing assert ->
>> assert_status conversions for the pthread_* functions. (And reverted a
>> change that shouldn't have been made - assert_status is for when the
>> "status" is the error code.)
>>
>> New webrev: http://cr.openjdk.java.net/~dholmes/8145725/webrev.v2/
>
> src/os/bsd/vm/os_bsd.cpp
>      Thanks for cleaning all the NPTL cruft out of the BSD/MacOS port.
>      Sorry that I never got back to cleaning out that stuff.
>
>      Nice untangling in Parker::unpark().
>
> src/os/linux/vm/os_linux.cpp
>      Nice untangling in Parker::unpark().
>
> src/share/vm/runtime/globals.hpp
>      No comments.
>
> Thumbs up!
>
> Dan
>
>
>>
>> Thanks,
>> David
>> -----
>>
>> On 8/02/2016 11:24 PM, Dmitry Dmitriev wrote:
>>> Hello David,
>>>
>>> Looks good to me. Just few additional clean-ups which you can consider
>>> for implementing.
>>> 1) hotspot/src/os/bsd/vm/os_bsd.cpp module
>>>
>>> I think that you can remove duplicated logic for mutex unlock from
>>> Parker::unpark function.
>>>
>>> I.e. transform it from:
>>> 4376 void Parker::unpark() {
>>> ...
>>> 4381   if (s < 1) {
>>> 4382     status = pthread_mutex_unlock(_mutex);
>>> 4383     assert_status(status == 0, status, "invariant");
>>> 4384     status = pthread_cond_signal(_cond);
>>> 4385     assert_status(status == 0, status, "invariant");
>>> 4386   } else {
>>> 4387     pthread_mutex_unlock(_mutex);
>>> 4388     assert_status(status == 0, status, "invariant");
>>> 4389   }
>>> 4390 }
>>>
>>> To something like that:
>>> void Parker::unpark() {
>>> ...
>>>    status = pthread_mutex_unlock(_mutex);
>>>    assert_status(status == 0, status, "invariant");
>>>    if (s < 1) {
>>>      status = pthread_cond_signal(_cond);
>>>      assert_status(status == 0, status, "invariant");
>>>    }
>>>   }
>>>
>>> 2) hotspot/src/os/linux/vm/os_linux.cpp
>>>
>>> Similar refactoring for Parker::unpark for removing duplicated logic for
>>> mutex unlock.
>>>
>>> From:
>>> 5720 void Parker::unpark() {
>>> ...
>>> 5725   if (s < 1) {
>>> 5726     // thread might be parked
>>> 5727     if (_cur_index != -1) {
>>> 5728       // thread is definitely parked
>>> 5729       // must capture correct index before unlocking
>>> 5730       int index = _cur_index;
>>> 5731       status = pthread_mutex_unlock(_mutex);
>>> 5732       assert(status == 0, "invariant");
>>> 5733       status = pthread_cond_signal(&_cond[index]);
>>> 5734       assert(status == 0, "invariant");
>>> 5735     } else {
>>> 5736       pthread_mutex_unlock(_mutex);
>>> 5737       assert(status == 0, "invariant");
>>> 5738     }
>>> 5739   } else {
>>> 5740     pthread_mutex_unlock(_mutex);
>>> 5741     assert(status == 0, "invariant");
>>> 5742   }
>>> 5743 }
>>>
>>> To:
>>>
>>> void Parker::unpark() {
>>> ...
>>>    if ((s < 1) && (_cur_index != -1)) {
>>>        // thread is definitely parked
>>>        // must capture correct index before unlocking
>>>        int index = _cur_index;
>>>        status = pthread_mutex_unlock(_mutex);
>>>        assert(status == 0, "invariant");
>>>        status = pthread_cond_signal(&_cond[index]);
>>>        assert(status == 0, "invariant");
>>>     } else {
>>>       pthread_mutex_unlock(_mutex);
>>>       assert(status == 0, "invariant");
>>>     }
>>> }
>>>
>>>
>>> Thanks,
>>> Dmitry
>>>
>>> On 08.02.2016 10:16, David Holmes wrote:
>>>> webrev: http://cr.openjdk.java.net/~dholmes/8145725/webrev/
>>>>
>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8145725
>>>>
>>>> In JDK-8130728 we disabled the workaround by default and have not seen
>>>> any issues (other than JDK-8029453). So now the workaround can be
>>>> removed completely.
>>>>
>>>> Thanks,
>>>> David
>>>
>>
>


More information about the hotspot-runtime-dev mailing list