Title: [112576] trunk/Source/WebKit/chromium
Revision
112576
Author
[email protected]
Date
2012-03-29 14:20:11 -0700 (Thu, 29 Mar 2012)

Log Message

[Chromium] WorkerFileSystemContextObserver can reference a deleted WorkerFileSystemCallbacksBridge.
https://bugs.webkit.org/show_bug.cgi?id=82565

WorkerFileSystemCallbacksBridge relies on a cleanUpAfterCallback being called
prior to the disposal of the bridge to ensure that WorkerFileSystemContextObserver
is unsubscribed and deleted. However cleanUpAfterCallback will only execute if the bridge's
callback has executed on the worker thread, and this might not be the case if the worker
terminates.

This patch fixes this by maintaining a RefPtr from WorkerFileSystemContextObserver to
WorkerFileSystemCallbacksBridge. This ensures that bridge is not deleted while observer is alive.

Reviewed by David Levin.

* src/WorkerFileSystemCallbacksBridge.cpp:
(WebKit::WorkerFileSystemContextObserver::create):
(WebKit::WorkerFileSystemContextObserver::WorkerFileSystemContextObserver):
(WorkerFileSystemContextObserver):

Modified Paths

Diff

Modified: trunk/Source/WebKit/chromium/ChangeLog (112575 => 112576)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-03-29 21:16:23 UTC (rev 112575)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-03-29 21:20:11 UTC (rev 112576)
@@ -1,3 +1,24 @@
+2012-03-29  Dmitry Lomov  <[email protected]>
+
+        [Chromium] WorkerFileSystemContextObserver can reference a deleted WorkerFileSystemCallbacksBridge.
+        https://bugs.webkit.org/show_bug.cgi?id=82565
+        
+        WorkerFileSystemCallbacksBridge relies on a cleanUpAfterCallback being called
+        prior to the disposal of the bridge to ensure that WorkerFileSystemContextObserver
+        is unsubscribed and deleted. However cleanUpAfterCallback will only execute if the bridge's
+        callback has executed on the worker thread, and this might not be the case if the worker
+        terminates.
+
+        This patch fixes this by maintaining a RefPtr from WorkerFileSystemContextObserver to
+        WorkerFileSystemCallbacksBridge. This ensures that bridge is not deleted while observer is alive.
+
+        Reviewed by David Levin.
+
+        * src/WorkerFileSystemCallbacksBridge.cpp:
+        (WebKit::WorkerFileSystemContextObserver::create):
+        (WebKit::WorkerFileSystemContextObserver::WorkerFileSystemContextObserver):
+        (WorkerFileSystemContextObserver):
+
 2012-03-29  Adam Barth  <[email protected]>
 
         Move CPP files related to ResourceHandle to WebCore/platform

Modified: trunk/Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp (112575 => 112576)


--- trunk/Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp	2012-03-29 21:16:23 UTC (rev 112575)
+++ trunk/Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp	2012-03-29 21:20:11 UTC (rev 112576)
@@ -146,7 +146,7 @@
 // that it only gets deleted on the worker context thread which is verified by ~Observer.
 class WorkerFileSystemContextObserver : public WebCore::WorkerContext::Observer {
 public:
-    static PassOwnPtr<WorkerFileSystemContextObserver> create(WorkerContext* context, WorkerFileSystemCallbacksBridge* bridge)
+    static PassOwnPtr<WorkerFileSystemContextObserver> create(WorkerContext* context, PassRefPtr<WorkerFileSystemCallbacksBridge> bridge)
     {
         return adoptPtr(new WorkerFileSystemContextObserver(context, bridge));
     }
@@ -158,15 +158,13 @@
     }
 
 private:
-    WorkerFileSystemContextObserver(WorkerContext* context, WorkerFileSystemCallbacksBridge* bridge)
+    WorkerFileSystemContextObserver(WorkerContext* context, PassRefPtr<WorkerFileSystemCallbacksBridge> bridge)
         : WebCore::WorkerContext::Observer(context)
         , m_bridge(bridge)
     {
     }
 
-    // Since WorkerFileSystemCallbacksBridge manages the lifetime of this class,
-    // m_bridge will be valid throughout its lifetime.
-    WorkerFileSystemCallbacksBridge* m_bridge;
+    RefPtr<WorkerFileSystemCallbacksBridge> m_bridge;
 };
 
 void WorkerFileSystemCallbacksBridge::stop()
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to