Title: [138482] trunk/Source/WebCore
Revision
138482
Author
[email protected]
Date
2012-12-26 12:13:25 -0800 (Wed, 26 Dec 2012)

Log Message

[Mac] MemoryPressureHandler: Occasional crashes in uninstall() when responding to memory pressure signal.
<http://webkit.org/b/105772>

Reviewed by Stephanie Lewis.

We can't synchronously dereference _cache_event_source in uninstall() just because m_installed
is true -- the block that initializes _cache_event_source is asynchronous and may not have executed.
Fix this by performing the uninstallation asynchronously on the main queue as well.

* platform/mac/MemoryPressureHandlerMac.mm:
(WebCore::MemoryPressureHandler::uninstall):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (138481 => 138482)


--- trunk/Source/WebCore/ChangeLog	2012-12-26 19:49:59 UTC (rev 138481)
+++ trunk/Source/WebCore/ChangeLog	2012-12-26 20:13:25 UTC (rev 138482)
@@ -1,3 +1,17 @@
+2012-12-26  Andreas Kling  <[email protected]>
+
+        [Mac] MemoryPressureHandler: Occasional crashes in uninstall() when responding to memory pressure signal.
+        <http://webkit.org/b/105772>
+
+        Reviewed by Stephanie Lewis.
+
+        We can't synchronously dereference _cache_event_source in uninstall() just because m_installed
+        is true -- the block that initializes _cache_event_source is asynchronous and may not have executed.
+        Fix this by performing the uninstallation asynchronously on the main queue as well.
+
+        * platform/mac/MemoryPressureHandlerMac.mm:
+        (WebCore::MemoryPressureHandler::uninstall):
+
 2012-12-26  Sheriff Bot  <[email protected]>
 
         Unreviewed, rolling out r137905.

Modified: trunk/Source/WebCore/platform/mac/MemoryPressureHandlerMac.mm (138481 => 138482)


--- trunk/Source/WebCore/platform/mac/MemoryPressureHandlerMac.mm	2012-12-26 19:49:59 UTC (rev 138481)
+++ trunk/Source/WebCore/platform/mac/MemoryPressureHandlerMac.mm	2012-12-26 20:13:25 UTC (rev 138482)
@@ -85,15 +85,19 @@
     if (!m_installed)
         return;
 
-    dispatch_source_cancel(_cache_event_source);
-    dispatch_release(_cache_event_source);
-    _cache_event_source = 0;
+    dispatch_async(dispatch_get_main_queue(), ^{
+        if (_cache_event_source) {
+            dispatch_source_cancel(_cache_event_source);
+            dispatch_release(_cache_event_source);
+            _cache_event_source = 0;
+        }
 
-    if (_timer_event_source) {
-        dispatch_source_cancel(_timer_event_source);
-        dispatch_release(_timer_event_source);
-        _timer_event_source = 0;
-    }
+        if (_timer_event_source) {
+            dispatch_source_cancel(_timer_event_source);
+            dispatch_release(_timer_event_source);
+            _timer_event_source = 0;
+        }
+    });
 
     m_installed = false;
     
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to