8037099: [macosx] Remove all references to GC from native OBJ-C code

Reviewed-by: anthony, serb
This commit is contained in:
Petr Pchelko 2014-03-14 16:01:04 +04:00
parent 1cd40d19c9
commit 72344ee850
26 changed files with 47 additions and 176 deletions

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -103,8 +103,6 @@ JNF_COCOA_ENTER(env);
CALayer *windowLayer = jlong_to_ptr(windowLayerPtr);
surfaceLayers = [[AWTSurfaceLayers alloc] initWithWindowLayer: windowLayer];
CFRetain(surfaceLayers);
[surfaceLayers release];
}];
JNF_COCOA_EXIT(env);

@ -112,9 +112,9 @@ AWT_ASSERT_APPKIT_THREAD;
remoteLayer.parentLayer = parentLayer;
remoteLayer.remoteLayer = NULL;
remoteLayer.jrsRemoteLayer = [remoteLayer createRemoteLayerBoundTo:JRSRemotePort];
CFRetain(remoteLayer); // REMIND
[remoteLayer retain]; // REMIND
remoteLayer.frame = CGRectMake(0, 0, 720, 500); // REMIND
CFRetain(remoteLayer.jrsRemoteLayer); // REMIND
[remoteLayer.jrsRemoteLayer retain]; // REMIND
int layerID = [remoteLayer.jrsRemoteLayer layerID];
NSLog(@"layer id to send = %d", layerID);
sendLayerID(layerID);
@ -1275,12 +1275,9 @@ JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
CALayer *windowLayer = jlong_to_ptr(windowLayerPtr);
AWTView *view = [[AWTView alloc] initWithRect:rect
platformView:cPlatformView
windowLayer:windowLayer];
CFRetain(view);
[view release]; // GC
newView = view;
newView = [[AWTView alloc] initWithRect:rect
platformView:cPlatformView
windowLayer:windowLayer];
}];
JNF_COCOA_EXIT(env);

@ -791,7 +791,7 @@ JNF_COCOA_ENTER(env);
contentView:contentView];
// the window is released is CPlatformWindow.nativeDispose()
if (window) CFRetain(window.nsWindow);
if (window) [window.nsWindow retain];
}];
JNF_COCOA_EXIT(env);

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -255,8 +255,6 @@ AWT_ASSERT_APPKIT_THREAD;
[super dealloc];
}
//- (void)finalize { [super finalize]; } // GC
#pragma mark Callbacks from AppKit
@ -623,8 +621,7 @@ JNIEXPORT jlong JNICALL Java_com_apple_eawt__1AppDockIconHandler_nativeGetDockIc
JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
image = [ApplicationDelegate _dockIconImage];
CFRetain(image);
image = [[ApplicationDelegate _dockIconImage] retain];
}];
JNF_COCOA_EXIT(env);

@ -72,7 +72,6 @@ static CClipboard *sClipboard = nil;
[super dealloc];
}
//- (void)finalize { [super finalize]; }
- (NSData *)data {
return fData;

@ -197,8 +197,6 @@ static jobject getImageForByteStream(JNIEnv *env, jbyteArray sourceData)
NSData *rawData = [NSData dataWithBytes:sourceBytes length:sourceSize];
NSImage *newImage = [[NSImage alloc] initWithData:rawData];
if (newImage) CFRetain(newImage); // GC
[newImage release];
(*env)->ReleasePrimitiveArrayCritical(env, sourceData, sourceBytes, JNI_ABORT);
CHECK_NULL_RETURN(newImage, NULL);

@ -79,7 +79,7 @@ JNF_COCOA_ENTER(env);
LSApplicationParameters params = {0, flags, NULL, NULL, NULL, NULL, NULL};
status = LSOpenURLsWithRole((CFArrayRef)[NSArray arrayWithObject:url], kLSRolesAll, NULL, &params, NULL, 0);
CFRelease(url);
[url release];
JNF_COCOA_EXIT(env);
return status;

@ -188,7 +188,7 @@ static BOOL sNeedsEnter;
fFormatMap = NULL;
}
CFRelease(self); // GC
[self release];
}
- (void)dealloc
@ -204,8 +204,6 @@ static BOOL sNeedsEnter;
[super dealloc];
}
//- (void)finalize { [super finalize]; }
// Appropriated from Windows' awt_DataTransferer.cpp:
//

@ -76,10 +76,6 @@ JNF_COCOA_ENTER(env);
}];
JNF_COCOA_EXIT(env);
if (dragSource) {
CFRetain(dragSource); // GC
[dragSource release];
}
return ptr_to_jlong(dragSource);
}

@ -169,7 +169,7 @@ extern JNFClassInfo jc_CDropTargetContextPeer;
fDropTargetContextPeer = NULL;
}
CFRelease(self);
[self release];
}
- (void)dealloc
@ -185,7 +185,6 @@ extern JNFClassInfo jc_CDropTargetContextPeer;
[super dealloc];
}
//- (void)finalize { [super finalize]; }
- (NSInteger) getDraggingSequenceNumber
{
@ -722,10 +721,6 @@ JNF_COCOA_ENTER(env);
dropTarget = [[CDropTarget alloc] init:jdroptarget component:jcomponent peer:jpeer control:controlObj];
JNF_COCOA_EXIT(env);
if (dropTarget) {
CFRetain(dropTarget); // GC
[dropTarget release];
}
return ptr_to_jlong(dropTarget);
}

@ -88,7 +88,6 @@ canChooseDirectories:(BOOL)inChooseDirectories
[super dealloc];
}
//- (void)finalize { [super finalize]; }
- (void)safeSaveOrLoad {
NSSavePanel *thePanel = nil;
@ -168,9 +167,9 @@ canChooseDirectories:(BOOL)inChooseDirectories
}
// ask the file filter up in Java
CFStringRef filePath = CFURLCopyFileSystemPath((CFURLRef)url, kCFURLPOSIXPathStyle);
BOOL shouldEnableFile = [self askFilenameFilter:(NSString *)filePath];
CFRelease(filePath);
NSString* filePath = (NSString*)CFURLCopyFileSystemPath((CFURLRef)url, kCFURLPOSIXPathStyle);
BOOL shouldEnableFile = [self askFilenameFilter:filePath];
[filePath release];
return shouldEnableFile;
}

@ -145,8 +145,7 @@ Java_sun_awt_CGraphicsEnvironment_registerDisplayReconfiguration
JNF_COCOA_ENTER(env);
JNFWeakJObjectWrapper *wrapper = [JNFWeakJObjectWrapper wrapperWithJObject:this withEnv:env];
CFRetain(wrapper); // pin from ObjC-GC
JNFWeakJObjectWrapper *wrapper = [[JNFWeakJObjectWrapper wrapperWithJObject:this withEnv:env] retain];
/* Register the callback */
if (CGDisplayRegisterReconfigurationCallback(&displaycb_handle, wrapper) != kCGErrorSuccess) {
@ -186,8 +185,7 @@ JNF_COCOA_ENTER(env);
}
[wrapper setJObject:NULL withEnv:env]; // more efficiant to pre-clear
CFRelease(wrapper);
[wrapper release];
JNF_COCOA_EXIT(env);
}

@ -115,14 +115,9 @@ JNF_COCOA_ENTER(env);
NSBitmapImageRep* imageRep = CImage_CreateImageRep(env, buffer, width, height);
if (imageRep) {
NSImage *nsImage = [[NSImage alloc] initWithSize:NSMakeSize(width, height)];
NSImage *nsImage = [[[NSImage alloc] initWithSize:NSMakeSize(width, height)] retain];
[nsImage addRepresentation:imageRep];
[imageRep release];
if (nsImage != nil) {
CFRetain(nsImage); // GC
}
result = ptr_to_jlong(nsImage);
}
@ -165,13 +160,8 @@ JNF_COCOA_ENTER(env);
(*env)->ReleaseIntArrayElements(env, widths, ws, JNI_ABORT);
}
if ([reps count]) {
NSImage *nsImage = [[NSImage alloc] initWithSize:NSMakeSize(0, 0)];
NSImage *nsImage = [[[NSImage alloc] initWithSize:NSMakeSize(0, 0)] retain];
[nsImage addRepresentations: reps];
if (nsImage != nil) {
CFRetain(nsImage); // GC
}
result = ptr_to_jlong(nsImage);
}
@ -194,8 +184,7 @@ JNF_COCOA_ENTER(env);
IconRef iconRef;
if (noErr == GetIconRef(kOnSystemDisk, kSystemIconsCreator, selector, &iconRef)) {
image = [[NSImage alloc] initWithIconRef:iconRef];
if (image) CFRetain(image); // GC
image = [[[NSImage alloc] initWithIconRef:iconRef] retain];
ReleaseIconRef(iconRef);
}
@ -217,8 +206,7 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromFile
JNF_COCOA_ENTER(env);
NSString *path = JNFNormalizedNSStringForPath(env, file);
image = [[NSImage alloc] initByReferencingFile:path];
if (image) CFRetain(image); // GC
image = [[[NSImage alloc] initByReferencingFile:path] retain];
JNF_COCOA_EXIT(env);
@ -239,9 +227,8 @@ JNF_COCOA_ENTER(env);
NSString *path = JNFNormalizedNSStringForPath(env, file);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
image = [[NSWorkspace sharedWorkspace] iconForFile:path];
image = [[[NSWorkspace sharedWorkspace] iconForFile:path] retain];
[image setScalesWhenResized:TRUE];
if (image) CFRetain(image); // GC
}];
JNF_COCOA_EXIT(env);
@ -261,8 +248,7 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromImag
JNF_COCOA_ENTER(env);
image = [NSImage imageNamed:JNFJavaToNSString(env, name)];
if (image) CFRetain(image); // GC
image = [[NSImage imageNamed:JNFJavaToNSString(env, name)] retain];
JNF_COCOA_EXIT(env);
@ -435,4 +421,4 @@ JNF_COCOA_ENTER(env);
JNF_COCOA_EXIT(env);
return jreturnArray;
}
}

@ -52,7 +52,6 @@ AWT_ASSERT_APPKIT_THREAD;
fMenu = nil;
[super dealloc];
}
//- (void)finalize { [super finalize]; }
- (void)addJavaSubmenu:(CMenu *)submenu {
[ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) on:self withObject:submenu waitUntilDone:YES];
@ -169,10 +168,6 @@ JNF_COCOA_ENTER(env);
// Add it to the parent menu
[((CMenu *)jlong_to_ptr(parentMenu)) addJavaSubmenu: aCMenu];
if (aCMenu) {
CFRetain(aCMenu); // GC
[aCMenu release];
}
JNF_COCOA_EXIT(env);
@ -209,10 +204,6 @@ JNF_COCOA_ENTER(env);
[parent javaSetHelpMenu: aCMenu];
}
if (aCMenu) {
CFRetain(aCMenu); // GC
[aCMenu release];
}
JNF_COCOA_EXIT(env);
return ptr_to_jlong(aCMenu);
}
@ -275,13 +266,9 @@ Java_sun_lwawt_macosx_CMenu_nativeGetNSMenu
NSMenu* nsMenu = NULL;
JNF_COCOA_ENTER(env);
nsMenu = [((CMenu *)jlong_to_ptr(menuObject)) menu];
JNF_COCOA_EXIT(env);
// Strong retain this menu; it'll get released in Java_apple_laf_ScreenMenu_addMenuListeners
if (nsMenu) {
CFRetain(nsMenu); // GC
}
nsMenu = [[((CMenu *)jlong_to_ptr(menuObject)) menu] retain];
JNF_COCOA_EXIT(env);
return ptr_to_jlong(nsMenu);
}

@ -405,10 +405,6 @@ Java_sun_lwawt_macosx_CMenuBar_nativeCreateMenuBar
JNF_COCOA_EXIT(env);
if (aCMenuBar) {
CFRetain(aCMenuBar); // GC
[aCMenuBar release];
}
return ptr_to_jlong(aCMenuBar);
}

@ -51,8 +51,7 @@
fPeer = NULL;
[self cleanup];
CFRelease(self); // GC
[self release];
}
// The method is used by all subclasses, since the process of the creation
@ -64,9 +63,6 @@
[argValue addObject: aCMenuItem];
}
//-(void) dealloc { [super dealloc]; }
//- (void)finalize { [super finalize]; }
@end
/*

@ -420,11 +420,6 @@ JNF_COCOA_ENTER(env);
// setLabel will be called after creation completes.
if (aCMenuItem) {
CFRetain(aCMenuItem); // GC
[aCMenuItem release];
}
JNF_COCOA_EXIT(env);
return ptr_to_jlong(aCMenuItem);
}

@ -66,8 +66,6 @@ JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
aCPopupMenu = [[CPopupMenu alloc] initWithPeer:cPeerObjGlobal];
CFRetain(aCPopupMenu);
[aCPopupMenu release];
}];
JNF_COCOA_EXIT(env);

@ -469,8 +469,6 @@ JNF_COCOA_ENTER(env);
// safety is assured by the java side of this call.
NSPrintInfo* printInfo = createDefaultNSPrintInfo(env, NULL);
if (printInfo) CFRetain(printInfo); // GC
[printInfo release];
result = ptr_to_jlong(printInfo);
@ -490,7 +488,7 @@ JNF_COCOA_ENTER(env);
if (nsPrintInfo != -1)
{
NSPrintInfo* printInfo = (NSPrintInfo*)jlong_to_ptr(nsPrintInfo);
if (printInfo) CFRelease(printInfo); // GC
[printInfo release];
}
JNF_COCOA_EXIT(env);
}

@ -75,7 +75,7 @@ static JNF_STATIC_MEMBER_CACHE(jm_systemColorsChanged, jc_LWCToolkit, "systemCol
sColors = (NSColor**)malloc(sizeof(NSColor*) * java_awt_SystemColor_NUM_COLORS);
} else {
for (i = 0; i < java_awt_SystemColor_NUM_COLORS; i++) {
if (sColors[i] != NULL) CFRelease(sColors[i]); // GC
if (sColors[i] != NULL) [sColors[i] release];
}
}
@ -108,14 +108,14 @@ static JNF_STATIC_MEMBER_CACHE(jm_systemColorsChanged, jc_LWCToolkit, "systemCol
sColors[java_awt_SystemColor_INFO_TEXT] = [NSColor textColor];
for (i = 0; i < java_awt_SystemColor_NUM_COLORS; i++) {
if (sColors[i] != NULL) CFRetain(sColors[i]); // GC
[sColors[i] retain];
}
if (appleColors == nil) {
appleColors = (NSColor**)malloc(sizeof(NSColor*) * sun_lwawt_macosx_LWCToolkit_NUM_APPLE_COLORS);
} else {
for (i = 0; i < sun_lwawt_macosx_LWCToolkit_NUM_APPLE_COLORS; i++) {
if (appleColors[i] != NULL) CFRelease(appleColors[i]); // GC
if (appleColors[i] != NULL) [appleColors[i] release];
}
}
@ -124,7 +124,7 @@ static JNF_STATIC_MEMBER_CACHE(jm_systemColorsChanged, jc_LWCToolkit, "systemCol
appleColors[sun_lwawt_macosx_LWCToolkit_INACTIVE_SELECTION_FOREGROUND_COLOR] = [NSColor controlDarkShadowColor];
for (i = 0; i < sun_lwawt_macosx_LWCToolkit_NUM_APPLE_COLORS; i++) {
if (appleColors[i] != NULL) CFRetain(appleColors[i]); // GC
[appleColors[i] retain];
}
}

@ -1497,7 +1497,7 @@ PRINT("ImageSD_dispose")
}
if (isdo->nsRef) {
CFRelease(isdo->nsRef); // GC
[isdo->nsRef release];
isdo->nsRef = nil;
}

@ -55,20 +55,6 @@
[super dealloc];
}
- (void)finalize
{
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
JNFDeleteGlobalRef(env, fAccessibleAction);
fAccessibleAction = NULL;
JNFDeleteGlobalRef(env, fComponent);
fComponent = NULL;
[super finalize];
}
- (NSString *)getDescription
{
static JNF_STATIC_MEMBER_CACHE(jm_getAccessibleActionDescription, sjc_CAccessibility, "getAccessibleActionDescription", "(Ljavax/accessibility/AccessibleAction;ILjava/awt/Component;)Ljava/lang/String;");
@ -116,19 +102,6 @@
[super dealloc];
}
- (void)finalize
{
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
JNFDeleteGlobalRef(env, fTabGroup);
fTabGroup = NULL;
JNFDeleteGlobalRef(env, fComponent);
fComponent = NULL;
[super finalize];
}
- (NSString *)getDescription
{
return @"click";

@ -192,20 +192,6 @@ static NSObject *sAttributeNamesLOCK = nil;
[super dealloc];
}
- (void)finalize
{
[self unregisterFromCocoaAXSystem];
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
JNFDeleteGlobalRef(env, fAccessible);
fAccessible = NULL;
JNFDeleteGlobalRef(env, fComponent);
fComponent = NULL;
[super finalize];
}
- (void)postValueChanged
{
@ -355,8 +341,8 @@ static NSObject *sAttributeNamesLOCK = nil;
// must init freshly -alloc'd object
[newChild initWithParent:parent withEnv:env withAccessible:jCAX withIndex:index withView:view withJavaRole:javaRole]; // must init new instance
// must hard CFRetain() pointer poked into Java object
CFRetain(newChild);
// must hard retain pointer poked into Java object
[newChild retain];
JNFSetLongField(env, jCAX, jf_ptr, ptr_to_jlong(newChild));
// return autoreleased instance
@ -1397,18 +1383,6 @@ static BOOL ObjectEquals(JNIEnv *env, jobject a, jobject b, jobject component);
[super dealloc];
}
- (void)finalize
{
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
if (fTabGroupAxContext != NULL) {
JNFDeleteGlobalRef(env, fTabGroupAxContext);
fTabGroupAxContext = NULL;
}
[super finalize];
}
- (id)accessibilityValueAttribute
{
JNIEnv *env = [ThreadUtilities getJNIEnv];

@ -291,17 +291,15 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_LWCToolkit_createAWTRunLoopMediato
{
AWT_ASSERT_APPKIT_THREAD;
AWTRunLoopObject *o = nil;
jlong result;
JNF_COCOA_ENTER(env);
// We double retain because this object is owned by both main thread and "other" thread
// We release in both doAWTRunLoop and stopAWTRunLoop
o = [[AWTRunLoopObject alloc] init];
if (o) {
CFRetain(o); // GC
CFRetain(o); // GC
[o release];
}
return ptr_to_jlong(o);
result = ptr_to_jlong([[[AWTRunLoopObject alloc] init] retain]);
JNF_COCOA_EXIT(env);
return result;
}
/*
@ -336,10 +334,7 @@ JNF_COCOA_ENTER(env);
}
}
CFRelease(mediatorObject);
[mediatorObject release];
JNF_COCOA_EXIT(env);
}
@ -357,7 +352,7 @@ JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThread:@selector(endRunLoop) on:mediatorObject withObject:nil waitUntilDone:NO];
CFRelease(mediatorObject);
[mediatorObject release];
JNF_COCOA_EXIT(env);
}

@ -48,7 +48,6 @@
[super dealloc];
}
//- (void)finalize { [super finalize]; }
- (BOOL)runPageSetup {
__block BOOL fResult = NO;
@ -86,8 +85,8 @@ AWT_ASSERT_NOT_APPKIT_THREAD;
fResult = [self safePrintLoop:printerView withEnv:env];
} else {
// Retain these so they don't go away while we're in Java
CFRetain(self); // GC
if (printerView) CFRetain(printerView); // GC
[self retain];
[printerView retain];
static JNF_CLASS_CACHE(jc_CPrinterJob, "sun/lwawt/macosx/CPrinterJob");
static JNF_STATIC_MEMBER_CACHE(jm_detachPrintLoop, jc_CPrinterJob, "detachPrintLoop", "(JJ)V");
@ -134,8 +133,8 @@ JNF_COCOA_ENTER(env);
[model safePrintLoop:arg withEnv:env];
// These are to match the retains in runPrintLoopWithView:
if (model) CFRelease(model); // GC
if (arg) CFRelease(arg); // GC
[model release];
[arg release];
JNF_COCOA_EXIT(env);
}

@ -71,7 +71,6 @@ AWT_ASSERT_APPKIT_THREAD;
[super dealloc];
}
//- (void)finalize { [super finalize]; }
- (void)finishLaunching
{