On Thu, 8 Apr 2021 06:58:14 GMT, Matthias Bläsing <github.com+2179736+matthiasblaes...@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. This pull request has now been integrated. Changeset: e02cee96 Author: Matthias Bläsing <mblaes...@doppel-helix.eu> Committer: Johan Vos <j...@openjdk.org> URL: https://git.openjdk.java.net/jfx/commit/e02cee96 Stats: 342 lines in 7 files changed: 315 ins; 7 del; 20 mod 8264990: WebEngine crashes with segfault when not loaded through system classloader Reviewed-by: kcr, ajoseph, jvos ------------- PR: https://git.openjdk.java.net/jfx/pull/458