On Mon, 7 Jun 2021 03:18:32 GMT, Henry Jen <[email protected]> wrote:
>> …d on macOS
>>
>> This patch simply round up the specified stack size to multiple of the
>> system page size.
>>
>> Test is trivial, simply run java with -Xss option against following code. On
>> MacOS, before the fix, running with `-Xss159k` and `-Xss160k` would get
>> `7183` and `649` respectively. After fix, both would output `649`, while
>> `-Xss161k` would be same as `-Xss164k` and see 691 as the output.
>>
>> ```code:java
>> public class StackLeak {
>> public int depth = 0;
>> public void stackLeak() {
>> depth++;
>> stackLeak();
>> }
>>
>> public static void main(String[] args) {
>> var test = new StackLeak();
>> try {
>> test.stackLeak();
>> } catch (Throwable e) {
>> System.out.println(test.depth);
>> }
>> }
>> }
>
> Henry Jen has updated the pull request with a new target base due to a merge
> or a rebase. The incremental webrev excludes the unrelated changes brought in
> by the merge/rebase. The pull request contains seven additional commits since
> the last revision:
>
> - Cast type
> - Merge
> - Change java -X output for -Xss
> - Merge
> - Only try to round-up when current value failed
> - Avoid overflow on page size
> - JDK-8236569: -Xss not multiple of 4K does not work for the main thread on
> macOS
Hi,
proposed shorter form. Otherwise this looks fine.
Cheers, Thomas
src/java.base/unix/native/libjli/java_md.c line 666:
> 664: return page_size * pages;
> 665: }
> 666: }
Could probably be shortened to something like this:
size_t pagesize = (size_t)sysconf(_SC_PAGESIZE);
return (stack_size + (pagesize - 1)) & ~(pagesize - 1);
or, if you insist on checking for SIZE_MAX:
size_t pagesize = (size_t)sysconf(_SC_PAGESIZE);
size_t max = SIZE_MAX - pagesize;
return stack_size <= max ? (stack_size + (pagesize - 1)) & ~(pagesize - 1) :
max;
(I see David requested this, so this is fine, though passing SIZE_MAX to this
function will quite likely fail anyway :)
-------------
PR: https://git.openjdk.java.net/jdk/pull/4256