RFR (XS) 8213383 : Wrap up pthread_cond_wait into a loop to workaround potential spurious wakeups
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Tue Nov 6 21:01:03 UTC 2018
Hi Ivan,
The fix looks good to me.
It is also possible to rewrite it like this:
while (jvm_signal_installing && tid != pthread_self()) {
pthread_cond_wait(&cond, &mutex);
}
We should not care about wasting on execution of the condition
tid != pthread_self() as spurious wakeups have to be rare.
Thanks,
Serguei
On 11/5/18 5:20 PM, Ivan Gerasimov wrote:
> Thank you Dean!
>
>
> On 11/5/18 4:09 PM, dean.long at oracle.com wrote:
>> Looks good, but do you want to use a while loop instead of if-do-while?
>>
>> if (tid != pthread_self()) {
>> while (jvm_signal_installing) {
>> pthread_cond_wait(&cond, &mutex);
>> }
>> }
>>
> This code will be executed before tid is initialized (see
> JVM_begin_signal_setting()), so jvm_signal_installing has to be tested
> first.
>
> With kind regards,
> Ivan
>
>> dl
>>
>> On 11/5/18 11:59 AM, Ivan Gerasimov wrote:
>>> Hello!
>>>
>>> In src/java.base/unix/native/libjsig/jsig.c:
>>>
>>> signal_lock() makes all the thread that are not jvm wait while the
>>> later is installing signal handlers.
>>> This is done via a call to pthread_cond_wait().
>>> Spurious wakeups from pthread_cond_wait() are allowed, so it needs
>>> to be wrapped up into a loop.
>>>
>>> Would you please help review the trivial fix?
>>> Control build and testing of tier1,2,3 went fine on all supported
>>> platforms.
>>>
>>> BUGURL: https://bugs.openjdk.java.net/browse/JDK-8213383
>>> WEBREV: http://cr.openjdk.java.net/~igerasim/8213383/00/webrev/
>>>
>>> Thanks!
>>>
>>
>
More information about the hotspot-runtime-dev
mailing list