RFR(S): 8020753: pthread_get_stacksize_np() workaround for OS X 10.9

Gerard Ziemski gerard.ziemski at oracle.com
Wed Oct 23 13:04:56 PDT 2013


I like that check - the issue lies inside the kernel most likely, so any 
fix would end up reving up the kernel version. Thank you.


On 10/23/2013 1:41 PM, Igor Veresov wrote:
> I guess it's reasonable.
>
> As for option (2) you can probably trigger the fix based on the kernel 
> version, that is rather easy to get:
>
> #include <errno.h>
> #include <sys/sysctl.h>
> char str[256];
> size_t size = sizeof(str);
> int ret = sysctlbyname("kern.osrelease", str, &size, NULL, 0);
>
> Versions 13.x.x would be Mavericks. You can use it to put an 
> additional assert.
>
> igor
>
>
>
>
> On Oct 23, 2013, at 7:20 AM, Gerard Ziemski <gerard.ziemski at oracle.com 
> <mailto:gerard.ziemski at oracle.com>> wrote:
>
>> Please review this proposed workaround for OS X 10.9 (Mavericks)
>>
>> Description:
>>
>> On Mac Os X 10.9 (Mavericks) the pthread_get_stacksize_np() API 
>> returns 128 pages for both main (primodial, primary) and secondary 
>> threads, when in fact 2048 pages are available for the main thread. 
>> pthread_get_stacksize_np() correctly returns 2048 pages for main 
>> thread on 10.6, 10.7 and 10.8 and probably all previous OS X versions.
>>
>> An issue has been filed with Apple, but in the meantime we need to 
>> substitute 2048 pages whenever pthread_get_stacksize_np() returns 
>> anything else (ie. 128) on main thread.
>>
>> The workaround uses hardcoded value of 2048 pages for main thread, 
>> because:
>>
>> 1. The correct value can in fact be found at runtime using signals 
>> (please see my test case attached to the bug's JDK issue), however, 
>> such code needs signal handlers and also takes about 3.5 ms, so it's 
>> probably not a viable solution.
>>
>> 2. We could also look-up OS X version at runtime to only use the 
>> workaround for 10.9, but that requires parsing an xml file, looking 
>> for a value that is internationalized, so it's non trivial (though 
>> might be doable assuming the time to execute is low enough)
>>
>> 3. All JDK8 supported OS X versions (ie. 10.7, 10.8) return 2048.
>>
>> In the future, this workaround might need to be revisited (ie. 2), 
>> but I believe that it's reasonable for now, though I would love to 
>> hear others opinions on this.
>>
>>
>> Testing:
>>
>> In progress...
>>
>>
>> References:
>>
>> http://cr.openjdk.java.net/~iklam/8020753/ziemski_rev1/ 
>> <http://cr.openjdk.java.net/%7Eiklam/8020753/ziemski_rev1/>
>> https://bugs.openjdk.java.net/browse/JDK-8020753
>>
>>
>> cheers
>>
>



More information about the hotspot-dev mailing list