Title: [92412] tags/Safari-534.49.1/Source

Diff

Modified: tags/Safari-534.49.1/Source/WebCore/ChangeLog (92411 => 92412)


--- tags/Safari-534.49.1/Source/WebCore/ChangeLog	2011-08-04 21:13:11 UTC (rev 92411)
+++ tags/Safari-534.49.1/Source/WebCore/ChangeLog	2011-08-04 21:29:08 UTC (rev 92412)
@@ -1,5 +1,27 @@
 2011-08-04  Lucas Forschler  <[email protected]>
 
+    Merged 90705.
+
+    2011-07-10  Anders Carlsson  <[email protected]>
+
+        WebKit2 is leaking NSCursors created by leakNamedCursor
+        https://bugs.webkit.org/show_bug.cgi?id=64241
+        <rdar://problem/9507151>
+
+        Reviewed by Oliver Hunt.
+
+        * platform/mac/CursorMac.mm:
+        (WebCore::createNamedCursor):
+        Rename this from leakNamedCursor to createNamedCursor and make it return a
+        RetainPtr<NSCursor> instead of a raw pointer.
+
+        (WebCore::Cursor::ensurePlatformCursor):
+        Don't leak cursors here. We still won't deallocate cursors during shutdown (which leakNamedCursor
+        was said to prevent) because the cursor singletons are all allocated from the heap and are never destroyed
+        anyway.
+
+2011-08-04  Lucas Forschler  <[email protected]>
+
     Merged 89214.
 
     2011-06-19  Michael Saboff  <[email protected]>

Modified: tags/Safari-534.49.1/Source/WebCore/platform/mac/CursorMac.mm (92411 => 92412)


--- tags/Safari-534.49.1/Source/WebCore/platform/mac/CursorMac.mm	2011-08-04 21:13:11 UTC (rev 92411)
+++ tags/Safari-534.49.1/Source/WebCore/platform/mac/CursorMac.mm	2011-08-04 21:29:08 UTC (rev 92412)
@@ -52,21 +52,17 @@
     return 0;
 }
 
-// Leak these cursors intentionally, that way we won't waste time trying to clean them
-// up at process exit time.
-static NSCursor* leakNamedCursor(const char* name, int x, int y)
+static RetainPtr<NSCursor> createNamedCursor(const char* name, int x, int y)
 {
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    NSString* resourceName = [[NSString alloc] initWithUTF8String:name];
-    NSImage* cursorImage = [[NSImage alloc] initWithContentsOfFile:
-        [[NSBundle bundleForClass:[WebCoreCursorBundle class]]
-        pathForResource:resourceName ofType:@"png"]];
-    [resourceName release];
-    NSCursor* cursor = 0;
+    RetainPtr<NSString> resourceName(AdoptNS, [[NSString alloc] initWithUTF8String:name]);
+    RetainPtr<NSImage> cursorImage(AdoptNS, [[NSImage alloc] initWithContentsOfFile:[[NSBundle bundleForClass:[WebCoreCursorBundle class]] pathForResource:resourceName.get() ofType:@"png"]]);
+    
+    RetainPtr<NSCursor> cursor;
+
     if (cursorImage) {
         NSPoint hotSpotPoint = {x, y}; // workaround for 4213314
-        cursor = [[NSCursor alloc] initWithImage:cursorImage hotSpot:hotSpotPoint];
-        [cursorImage release];
+        cursor.adoptNS([[NSCursor alloc] initWithImage:cursorImage.get() hotSpot:hotSpotPoint]);
     }
     return cursor;
     END_BLOCK_OBJC_EXCEPTIONS;
@@ -83,67 +79,67 @@
         m_platformCursor = [NSCursor arrowCursor];
         break;
     case Cursor::Cross:
-        m_platformCursor = leakNamedCursor("crossHairCursor", 11, 11);
+        m_platformCursor = createNamedCursor("crossHairCursor", 11, 11);
         break;
     case Cursor::Hand:
-        m_platformCursor = leakNamedCursor("linkCursor", 6, 1);
+        m_platformCursor = createNamedCursor("linkCursor", 6, 1);
         break;
     case Cursor::IBeam:
         m_platformCursor = [NSCursor IBeamCursor];
         break;
     case Cursor::Wait:
-        m_platformCursor = leakNamedCursor("waitCursor", 7, 7);
+        m_platformCursor = createNamedCursor("waitCursor", 7, 7);
         break;
     case Cursor::Help:
-        m_platformCursor = leakNamedCursor("helpCursor", 8, 8);
+        m_platformCursor = createNamedCursor("helpCursor", 8, 8);
         break;
     case Cursor::Move:
     case Cursor::MiddlePanning:
-        m_platformCursor = leakNamedCursor("moveCursor", 7, 7);
+        m_platformCursor = createNamedCursor("moveCursor", 7, 7);
         break;
     case Cursor::EastResize:
     case Cursor::EastPanning:
-        m_platformCursor = leakNamedCursor("eastResizeCursor", 14, 7);
+        m_platformCursor = createNamedCursor("eastResizeCursor", 14, 7);
         break;
     case Cursor::NorthResize:
     case Cursor::NorthPanning:
-        m_platformCursor = leakNamedCursor("northResizeCursor", 7, 1);
+        m_platformCursor = createNamedCursor("northResizeCursor", 7, 1);
         break;
     case Cursor::NorthEastResize:
     case Cursor::NorthEastPanning:
-        m_platformCursor = leakNamedCursor("northEastResizeCursor", 14, 1);
+        m_platformCursor = createNamedCursor("northEastResizeCursor", 14, 1);
         break;
     case Cursor::NorthWestResize:
     case Cursor::NorthWestPanning:
-        m_platformCursor = leakNamedCursor("northWestResizeCursor", 0, 0);
+        m_platformCursor = createNamedCursor("northWestResizeCursor", 0, 0);
         break;
     case Cursor::SouthResize:
     case Cursor::SouthPanning:
-        m_platformCursor = leakNamedCursor("southResizeCursor", 7, 14);
+        m_platformCursor = createNamedCursor("southResizeCursor", 7, 14);
         break;
     case Cursor::SouthEastResize:
     case Cursor::SouthEastPanning:
-        m_platformCursor = leakNamedCursor("southEastResizeCursor", 14, 14);
+        m_platformCursor = createNamedCursor("southEastResizeCursor", 14, 14);
         break;
     case Cursor::SouthWestResize:
     case Cursor::SouthWestPanning:
-        m_platformCursor = leakNamedCursor("southWestResizeCursor", 1, 14);
+        m_platformCursor = createNamedCursor("southWestResizeCursor", 1, 14);
         break;
     case Cursor::WestResize:
-        m_platformCursor = leakNamedCursor("westResizeCursor", 1, 7);
+        m_platformCursor = createNamedCursor("westResizeCursor", 1, 7);
         break;
     case Cursor::NorthSouthResize:
-        m_platformCursor = leakNamedCursor("northSouthResizeCursor", 7, 7);
+        m_platformCursor = createNamedCursor("northSouthResizeCursor", 7, 7);
         break;
     case Cursor::EastWestResize:
     case Cursor::WestPanning:
-        m_platformCursor = leakNamedCursor("eastWestResizeCursor", 7, 7);
+        m_platformCursor = createNamedCursor("eastWestResizeCursor", 7, 7);
         break;
     case Cursor::NorthEastSouthWestResize:
-        m_platformCursor = leakNamedCursor("northEastSouthWestResizeCursor", 7, 7);
+        m_platformCursor = createNamedCursor("northEastSouthWestResizeCursor", 7, 7);
         break;
     case Cursor::NorthWestSouthEastResize:
-        m_platformCursor = leakNamedCursor("northWestSouthEastResizeCursor", 7, 7);
+        m_platformCursor = createNamedCursor("northWestSouthEastResizeCursor", 7, 7);
         break;
     case Cursor::ColumnResize:
         m_platformCursor = [NSCursor resizeLeftRightCursor];
@@ -152,37 +148,37 @@
         m_platformCursor = [NSCursor resizeUpDownCursor];
         break;
     case Cursor::VerticalText:
-        m_platformCursor = leakNamedCursor("verticalTextCursor", 7, 7);
+        m_platformCursor = createNamedCursor("verticalTextCursor", 7, 7);
         break;
     case Cursor::Cell:
-        m_platformCursor = leakNamedCursor("cellCursor", 7, 7);
+        m_platformCursor = createNamedCursor("cellCursor", 7, 7);
         break;
     case Cursor::ContextMenu:
-        m_platformCursor = leakNamedCursor("contextMenuCursor", 3, 2);
+        m_platformCursor = createNamedCursor("contextMenuCursor", 3, 2);
         break;
     case Cursor::Alias:
-        m_platformCursor = leakNamedCursor("aliasCursor", 11, 3);
+        m_platformCursor = createNamedCursor("aliasCursor", 11, 3);
         break;
     case Cursor::Progress:
-        m_platformCursor = leakNamedCursor("progressCursor", 3, 2);
+        m_platformCursor = createNamedCursor("progressCursor", 3, 2);
         break;
     case Cursor::NoDrop:
-        m_platformCursor = leakNamedCursor("noDropCursor", 3, 1);
+        m_platformCursor = createNamedCursor("noDropCursor", 3, 1);
         break;
     case Cursor::Copy:
-        m_platformCursor = leakNamedCursor("copyCursor", 3, 2);
+        m_platformCursor = createNamedCursor("copyCursor", 3, 2);
         break;
     case Cursor::None:
-        m_platformCursor = leakNamedCursor("noneCursor", 7, 7);
+        m_platformCursor = createNamedCursor("noneCursor", 7, 7);
         break;
     case Cursor::NotAllowed:
-        m_platformCursor = leakNamedCursor("notAllowedCursor", 11, 11);
+        m_platformCursor = createNamedCursor("notAllowedCursor", 11, 11);
         break;
     case Cursor::ZoomIn:
-        m_platformCursor = leakNamedCursor("zoomInCursor", 7, 7);
+        m_platformCursor = createNamedCursor("zoomInCursor", 7, 7);
         break;
     case Cursor::ZoomOut:
-        m_platformCursor = leakNamedCursor("zoomOutCursor", 7, 7);
+        m_platformCursor = createNamedCursor("zoomOutCursor", 7, 7);
         break;
     case Cursor::Grab:
         m_platformCursor = [NSCursor openHandCursor];

Modified: tags/Safari-534.49.1/Source/WebKit2/ChangeLog (92411 => 92412)


--- tags/Safari-534.49.1/Source/WebKit2/ChangeLog	2011-08-04 21:13:11 UTC (rev 92411)
+++ tags/Safari-534.49.1/Source/WebKit2/ChangeLog	2011-08-04 21:29:08 UTC (rev 92412)
@@ -1,3 +1,21 @@
+2011-08-04  Lucas Forschler  <[email protected]>
+
+    Merged 90705.
+
+    2011-07-10  Anders Carlsson  <[email protected]>
+
+        WebKit2 is leaking NSCursors created by leakNamedCursor
+        https://bugs.webkit.org/show_bug.cgi?id=64241
+        <rdar://problem/9507151>
+
+        Reviewed by Oliver Hunt.
+
+        * Shared/WebCoreArgumentCoders.cpp:
+        (CoreIPC::::decode):
+        When decoding a cursor of a known type, make sure to eagerly create the platform cursor
+        for the cursor singleton. This way we avoid re-creating new NSCursor objects over and over for
+        standard cursors.
+
 2011-08-02  Lucas Forschler  <[email protected]>
 
     Merged 92231.

Modified: tags/Safari-534.49.1/Source/WebKit2/Shared/WebCoreArgumentCoders.h (92411 => 92412)


--- tags/Safari-534.49.1/Source/WebKit2/Shared/WebCoreArgumentCoders.h	2011-08-04 21:13:11 UTC (rev 92411)
+++ tags/Safari-534.49.1/Source/WebKit2/Shared/WebCoreArgumentCoders.h	2011-08-04 21:29:08 UTC (rev 92412)
@@ -221,7 +221,12 @@
         WebCore::Cursor::Type type = static_cast<WebCore::Cursor::Type>(typeInt);
 
         if (type != WebCore::Cursor::Custom) {
-            cursor = WebCore::Cursor::fromType(type);
+            const WebCore::Cursor& cursorReference = WebCore::Cursor::fromType(type);
+            // Calling platformCursor here will eagerly create the platform cursor for the cursor singletons inside WebCore.
+            // This will avoid having to re-create the platform cursors over and over.
+            (void)cursorReference.platformCursor();
+
+            cursor = cursorReference;
             return true;
         }
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to