Integrated: 8264990: WebEngine crashes with segfault when not loaded through system classloader
Matthias Bläsing
github.com+2179736+matthiasblaesing at openjdk.java.net
Mon Apr 19 18:49:10 UTC 2021
On Thu, 8 Apr 2021 06:58:14 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.
This pull request has now been integrated.
Changeset: e02cee96
Author: Matthias Bläsing <mblaesing at doppel-helix.eu>
Committer: Johan Vos <jvos at 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
More information about the openjfx-dev
mailing list