Currently, OpenJFX extracts the native library into a local folder and loads it 
when it is not part of the JRE.

Now we have a notable problem with the fact that a platform may actually run 
programs of multiple CPU architectures.

Most commonly, 32-bit x86 applications can be executed on Windows AMD64. In 
addition to this, ARM machines may also execute AMD64 programs by transpiling.

For OpenJFX of different architectures on the same system, their native 
libraries have the same file name, but their contents are different. Since they 
will try to unpack the native library into the same folder, this will cause 
file conflicts.

A practical example is when I run the same JavaFX application with both 32-bit 
and 64-bit Java on a Windows AMD64 platform, and the application that starts 
later crashes because it cannot unzip the native libraries:

Crash logs (The length exceeds the GitHub limit): 
https://paste.ubuntu.com/p/NZBK3pNrh7/

Here I avoid the problem by adding `os.arch` to the cache path. 

I ran the tests on Ubuntu 20.04 after the modification and no tests were broken.

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

Commit messages:
 - Cache native libraries with architecture-dependent paths

Changes: https://git.openjdk.java.net/jfx/pull/762/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jfx&pr=762&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8280369
  Stats: 5 lines in 1 file changed: 2 ins; 0 del; 3 mod
  Patch: https://git.openjdk.java.net/jfx/pull/762.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/762/head:pull/762

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

Reply via email to