On Fri, 12 Jan 2024 17:47:23 GMT, Christoph Langer <[email protected]> wrote:
> This picks up fixing the issue of > [JDK-8276809](https://bugs.openjdk.org/browse/JDK-8276809) again. A fix had > been integrated with #17224 but @prrace had concerns and so it was backed out. > > I have now spent quite some thoughts into the problem and end up with the > [initial > commit](https://github.com/openjdk/jdk/pull/6306/commits/5d18a76cb967e9ede6394cbd6c28bb61facf785c) > of #6306 as the most elegant and least intrusive solution. > > Why is this? > > The JNI warning we observe in the test is: > `[WARNING in native method: JNI call made without checking exceptions when > required to from CallStaticVoidMethodV > at > sun.awt.Win32GraphicsEnvironment.initDisplay([email protected]/Native > Method) > at > sun.awt.Win32GraphicsEnvironment.initDisplayWrapper([email protected]/Win32GraphicsEnvironment.java:95) > at > sun.awt.Win32GraphicsEnvironment.<clinit>([email protected]/Win32GraphicsEnvironment.java:63) > ... > at FreeTypeScalerJNICheck.runTest(FreeTypeScalerJNICheck.java:53) > at FreeTypeScalerJNICheck.main(FreeTypeScalerJNICheck.java:44)` > > This happens because obviously the test FreeTypeScalerJNICheck runs with > `-Xcheck:jni` and in the scenario where we're observing the warning, a > missing exception check for the JNI call to > `sun.awt.Win32GraphicsEnvironment::dwmCompositionChanged` at > awt_Win32GraphicsEnv.cpp#L129 > https://github.com/openjdk/jdk/blob/c5e72450966ad50d57a8d22e9d634bfcb319aee9/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsEnv.cpp#L129 > is airing up. Omitting the exception check would not be a problem if it > could be guaranteed that after this call no other JNI->Java call was being > made. But seemingly in this very particular configuration on some of our > Windows servers, there must be JNI->Java calls that follow the call to > `sun.awt.Win32GraphicsEnvironment::dwmCompositionChanged`, likely from the > subsequent call to > [initScreens](https://github.com/openjdk/jdk/blob/c5e72450966ad50d57a8d22e9d634bfcb319aee9/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsEnv.cpp#L149) > in `sun.awt.Win32GraphicsEnvironment::initDisplay`. > https://github.com/openjdk/jdk/blob/8b6293f6bfb7b7628c6604e6c44401fc96d85cf4/src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsEnv.cpp#L141 > Maybe the usual control flow would call the wrapping native method > `DWMIsCompositi onEnabled()` from somewhere else initially such that the initialization of `Win32GraphicsEnvironment` would not go through `initScreens` or similar. > ... This pull request has now been integrated. Changeset: 99c9ae12 Author: Christoph Langer <[email protected]> URL: https://git.openjdk.org/jdk/commit/99c9ae127c0a3b8c4fc6ede87079ff7c693a2905 Stats: 21 lines in 2 files changed: 5 ins; 5 del; 11 mod 8323664: java/awt/font/JNICheck/FreeTypeScalerJNICheck.java still fails with JNI warning on some Windows configurations Reviewed-by: prr, mbaesken, aivanov ------------- PR: https://git.openjdk.org/jdk/pull/17404
