Workaround for Oracle JVM to detect, recover from and prevent shrinking of R stack #102
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
On Linux, Oracle JVM inserts guard pages into the C stack of the initial thread, which is the main R thread in case of rJava. The stack size is limited to 2M or the maximum size given by -Xss (or its default), whichever is smaller. R needs typically a bigger stack and, yet worse, it cannot detect stack overflow anymore after the guard pages have been inserted. This patch detects when the stack is reduced and updates R stack information accordingly so that R can still detect stack overflow. Moreover, the patch includes a workaround that prevents the JVM from significantly shrinking the stack if possible. A warning is printed if the stack has still been reduced considerably. This code is only compiled and used on Linux.