8041572: [macosx] huge native memory leak in AWTWindow.m
authorpchelko
Fri, 25 Apr 2014 16:27:30 +0400
changeset 24534 07cf38b730b5
parent 24533 7c429f6f88d2
child 24535 9b1698300d1d
8041572: [macosx] huge native memory leak in AWTWindow.m Reviewed-by: serb, anthony
jdk/src/macosx/native/sun/awt/AWTWindow.m
jdk/src/macosx/native/sun/awt/CGraphicsDevice.m
--- a/jdk/src/macosx/native/sun/awt/AWTWindow.m	Thu Apr 24 20:22:58 2014 +0400
+++ b/jdk/src/macosx/native/sun/awt/AWTWindow.m	Fri Apr 25 16:27:30 2014 +0400
@@ -261,7 +261,8 @@
 
 // returns id for the topmost window under mouse
 + (NSInteger) getTopmostWindowUnderMouseID {
-
+    NSInteger result = -1;
+    
     NSRect screenRect = [[NSScreen mainScreen] frame];
     NSPoint nsMouseLocation = [NSEvent mouseLocation];
     CGPoint cgMouseLocation = CGPointMake(nsMouseLocation.x, screenRect.size.height - nsMouseLocation.y);
@@ -274,11 +275,13 @@
             CGRect rect;
             CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)[window objectForKey:(id)kCGWindowBounds], &rect);
             if (CGRectContainsPoint(rect, cgMouseLocation)) {
-                return [[window objectForKey:(id)kCGWindowNumber] integerValue];
+                result = [[window objectForKey:(id)kCGWindowNumber] integerValue];
+                break;
             }
         }
     }
-    return -1;
+    [windows release];
+    return result;
 }
 
 // checks that this window is under the mouse cursor and this point is not overlapped by others windows
--- a/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m	Thu Apr 24 20:22:58 2014 +0400
+++ b/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m	Fri Apr 25 16:27:30 2014 +0400
@@ -66,7 +66,8 @@
             CFArrayAppendValue(validModes, cRef);
         }
     }
-
+    CFRelease(allModes);
+    
     CGDisplayModeRef currentMode = CGDisplayCopyDisplayMode(displayID);
 
     BOOL containsCurrentMode = NO;
@@ -81,6 +82,7 @@
     if (!containsCurrentMode) {
         CFArrayAppendValue(validModes, currentMode);
     }
+    CGDisplayModeRelease(currentMode);
 
     return validModes;
 }