RFR: 8218975: Bug in macOSX kernel's pthread support
David Holmes
david.holmes at oracle.com
Mon Mar 18 23:19:52 UTC 2019
Hi Kim,
On 19/03/2019 9:04 am, Kim Barrett wrote:
>> On Mar 17, 2019, at 9:43 PM, David Holmes <david.holmes at oracle.com> wrote:
>>
>> Hi Kim and Patricio
>>
>> On 16/03/2019 9:03 am, Kim Barrett wrote:
>>> Please review this fix for intermittent Mac-only crashes involving the
>>> OWSTTaskTerminator.
>>> This is joint work with Patricio Chilano Mateo.
>>
>> Fantastic job in pinning this one down!
>
> For the record, Patricio did the heavy lifting on getting to the
> bottom of this, including building and running patched versions of the
> macOSX kernel and pthread library, developing the standalone reproducer,
> and analyzing its behavior.
>
>> The fix generally looks good though I agree with Thomas that X_ptr() should just be X().
>
> OK, _ptr suffix dropped. In my defence, that convention is used by
> the C++ standard, both in standard APIs and in examples. Though
> following "standard" conventions would probably use references in a
> lot of places where HotSpot code uses pointers.
>
>> There is one minor issue:
>>
>> + pthread_mutex_t os::PlatformMonitor::_freelist_lock = PTHREAD_MUTEX_INITIALIZER;
>>
>> on FreeBSD the default mutex initialization doesn't use PTHREAD_MUTEX_NORMAL and so we get a slow debug version IIRC. That's why we explicitly use non-static pthread_mutex initialization using a pthread_mutex_attr. You should be able to move the _freelist_lock initialization to pthread_init_common() with the PLATFORM_MONITOR_IMPL_INDIRECT guard.
>
> The workaround isn't in FreeBSD code, it is macOSX-specific, where the
Yes my bad! Was thinking too broadly.
> implemented default is "normal" rather than "errorcheck". But the
> documentation seems to be vague on that (as with FreeBSD and POSIX
> documentation, but not Linux, where the defaults are spelled out).
> Since the cost of explicitly ensuring we use "normal" mutexes is
> small, let's be paranoid and do so.
Okay. That's consistent with the existing unconditional dynamic
initialization of mutexes etc.
> New webrevs:
> full: http://cr.openjdk.java.net/~kbarrett/8218975/open.02/
> incr: http://cr.openjdk.java.net/~kbarrett/8218975/open.02.inc/
Looks good!
Thanks,
David
More information about the hotspot-dev
mailing list