On Mon, 18 Jan 2021 16:08:37 GMT, Phil Race <p...@openjdk.org> wrote:
> This removes desktop module usage of the JNF JNI reference convenience APIs > These are simply a direct conversion > JNFNewGlobalRef > JNFDeleteGlobalRef > JNFNewWeakGlobalRef > JNFDeleteWeakGlobalRef > > These two > JNFJObjectWrapper > JNFWeakJObjectWrapper > exist to allow clean up of the refs when a Cocoa wrapper object is released. > However in all cases there are more direct ways to clean it up and in at > least one usage > the existing code directly releases it with the comment that this is more > efficient. > > All our automated regression and JCK tests pass with this change. src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.h line 55: > 53: @property (nonatomic, retain) NSWindow *nsWindow; > 54: > 55: @property (nonatomic) jobject javaPlatformWindow; I think it will be useful to have a comment here that this value is a weak reference and should be copied to the local ref before usage. src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m line 1547: > 1545: AWTWindow *awtWindow = [AWTWindow getTopmostWindowUnderMouse]; > 1546: if (awtWindow != nil) { > 1547: topmostWindowUnderMouse = awtWindow.javaPlatformWindow; I wonder what type of "reference" we should return here, I do not remember how the "NewWeakGlobalRef" behave when returned to java. src/java.desktop/macosx/native/libawt_lwawt/awt/CDragSourceContextPeer.m line 58: > 56: jobject gTriggerEvent = (*env)->NewGlobalRef(env, jtrigger); > 57: jlongArray gFormats = (*env)->NewGlobalRef(env, jformats); > 58: jobject gFormatMap = (*env)->NewGlobalRef(env, jformatmap); All above should be checked for NULL since OOM may occur, but it looks like it does not throw OOM? https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#NewGlobalRef ------------- PR: https://git.openjdk.java.net/jdk/pull/2133