RFR: 8264990: Fix segfault when accessing local storage in webview
Kevin Rushforth
kcr at openjdk.java.net
Fri Apr 9 19:37:39 UTC 2021
On Thu, 8 Apr 2021 20:43:57 GMT, Kevin Rushforth <kcr 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 fix looks OK to me, although I'd like @arun-Joseph to comfirm.
>
> The test needs one change in how the resource (the `.html` file) is located, and I added a couple minor comments on the test. I'll test it after that.
To follow up on my earlier comment, if I move `LocalStorageAccess.html` to `tests/system/src/testapp7/resources/mymod/myapp7/` and remove the `/` from the program that loads it, the test is able to load the resource. And I verified that the test fails without your fix and passes with your fix.
-------------
PR: https://git.openjdk.java.net/jfx/pull/458
More information about the openjfx-dev
mailing list