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.

-------------

Commit messages:
 - Address review comments
 - 9069811: Fix segfault when accessing local storage in webview
 - 9069811: Create reproducer for segfault when accessing local storage

Changes: https://git.openjdk.java.net/jfx/pull/458/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jfx&pr=458&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8264990
  Stats: 362 lines in 7 files changed: 325 ins; 7 del; 30 mod
  Patch: https://git.openjdk.java.net/jfx/pull/458.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/458/head:pull/458

PR: https://git.openjdk.java.net/jfx/pull/458

Reply via email to