RFR: 8264990: Fix segfault when accessing local storage in webview
Johan Vos
jvos at openjdk.java.net
Fri Apr 9 19:37:39 UTC 2021
On Thu, 8 Apr 2021 12:30:38 GMT, Matthias Bläsing <github.com+2179736+matthiasblaesing at openjdk.org> wrote:
>> The functions from FileSystemJava are called from different threads the
>> root problem manifests because the JNI FindClass function behaves
>> differently when called from a context that is the ancestor of a java
>> frame compared to when called in isolation.
>>
>> A segmentation fault is observed when local storage of a webview is
>> accessed. At that time a new native thread is spun up and that sets up
>> the local storage, by calling into the JVM via
>> WTF::FileSystem::makeAllDirectories. At that point GetFileSystemClass is
>> invoked to get a referenc to the java implementation of the FileSystem.
>> As this is is called from a new native thread (no java context
>> available), JNI uses the system classloader to locate the class. This
>> fails if the JavaFX modules are not on the boot module/class path.
>>
>> Instead on relying on fetching the class reference everytime it is
>> needed, this change fetches it once when the JavaFX library is loaded
>> and stores it in the WTF namespace.
>>
>> In addition to this it was observed, that there is no attachment to the
>> JVM done when calling into the filesystem. No fault was observed, but
>> the JNI specs indicate, that the JNIEnv interface is only valid when
>> attached.
>
> The issue reference is the ID I got after I requested a bug to be created - I'm waiting to have it being opened up.
We have a concurrency issue here, as I created https://bugs.openjdk.java.net/browse/JDK-8264886 and a PR https://github.com/openjdk/jfx/pull/459 .
However, I recommend we proceed with this PR, as it also fixes the failure with the WebKitFileSystem class reference (which should indeed be done in the OnLoad).
The fix looks good, I'll have a look at the tests.
-------------
PR: https://git.openjdk.java.net/jfx/pull/458
More information about the openjfx-dev
mailing list