[BlackBerry] Update to the thread-safe GuardedPointer API
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Apr 2012 16:05:49 +0000 (16:05 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Apr 2012 16:05:49 +0000 (16:05 +0000)
https://bugs.webkit.org/show_bug.cgi?id=83603

Patch by Joe Mason <jmason@rim.com> on 2012-04-11
Reviewed by Rob Buis.

Source/WebCore:

RIM PR: 134894
Make the destructors of all objects inheriting GuardedPointerBase protected or
private, and delete them using BlackBerry::Platform::deleteGuardedObject.
Access all GuardedPointers through GuardedPointerLocker. Use GuardedPointerDeleter
to delete LayerCompositingThread to avoid a deadlock.

No new tests, refactor.

Reviewed internally by Yong Li and George Staikos.

* platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp:
(WebCore::CookieDatabaseBackingStore::~CookieDatabaseBackingStore):
* platform/blackberry/CookieManager.h:
* platform/graphics/blackberry/LayerCompositingThread.cpp:
* platform/graphics/blackberry/LayerCompositingThread.h:
(LayerCompositingThread):
(WTF::::deref):
* platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
(WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):

Source/WebKit/blackberry:

RIM PR: 134984
Make the destructors of all objects inheriting GuardedPointerBase protected or
private, and delete them using BlackBerry::Platform::deleteGuardedObject.
Access all GuardedPointers through GuardedPointerLocker.

No new tests, refactor.

Reviewed internally by Yong Li and George Staikos.

* Api/BackingStore.cpp:
(BlackBerry::WebKit::BackingStore::~BackingStore):
* Api/BackingStore_p.h:
(BackingStorePrivate):
* Api/WebPage.cpp:
(BlackBerry::WebKit::WebPage::~WebPage):
(BlackBerry::WebKit::WebPage::destroy):
* Api/WebPage.h:
* Api/WebPage_p.h:
(WebPagePrivate):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@113868 268f45cc-cd09-0410-ab3c-d52691b4dbfc

12 files changed:
Source/WebCore/ChangeLog
Source/WebCore/platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp
Source/WebCore/platform/blackberry/CookieManager.h
Source/WebCore/platform/graphics/blackberry/LayerCompositingThread.cpp
Source/WebCore/platform/graphics/blackberry/LayerCompositingThread.h
Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp
Source/WebKit/blackberry/Api/BackingStore.cpp
Source/WebKit/blackberry/Api/BackingStore_p.h
Source/WebKit/blackberry/Api/WebPage.cpp
Source/WebKit/blackberry/Api/WebPage.h
Source/WebKit/blackberry/Api/WebPage_p.h
Source/WebKit/blackberry/ChangeLog

index 15b27fc..f86344b 100644 (file)
@@ -1,3 +1,30 @@
+2012-04-11  Joe Mason  <jmason@rim.com>
+
+        [BlackBerry] Update to the thread-safe GuardedPointer API
+        https://bugs.webkit.org/show_bug.cgi?id=83603
+
+        Reviewed by Rob Buis.
+
+        RIM PR: 134894
+        Make the destructors of all objects inheriting GuardedPointerBase protected or
+        private, and delete them using BlackBerry::Platform::deleteGuardedObject.
+        Access all GuardedPointers through GuardedPointerLocker. Use GuardedPointerDeleter
+        to delete LayerCompositingThread to avoid a deadlock.
+
+        No new tests, refactor.
+
+        Reviewed internally by Yong Li and George Staikos.
+
+        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp:
+        (WebCore::CookieDatabaseBackingStore::~CookieDatabaseBackingStore):
+        * platform/blackberry/CookieManager.h:
+        * platform/graphics/blackberry/LayerCompositingThread.cpp:
+        * platform/graphics/blackberry/LayerCompositingThread.h:
+        (LayerCompositingThread):
+        (WTF::::deref):
+        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
+        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
+
 2012-04-11  Andras Becsi  <andras.becsi@nokia.com>
 
         [Qt] Fix the build on OpenGL ES2 platforms
index 4554add..b27003a 100644 (file)
@@ -71,7 +71,7 @@ CookieDatabaseBackingStore::CookieDatabaseBackingStore()
 
 CookieDatabaseBackingStore::~CookieDatabaseBackingStore()
 {
-    delete m_dbTimerClient;
+    deleteGuardedObject(m_dbTimerClient);
     m_dbTimerClient = 0;
     // FIXME: This object will never be deleted due to the set up of CookieManager (it's a singleton)
     CookieLog("CookieBackingStore - Destructing");
index 4dcd3f4..904551e 100644 (file)
@@ -115,7 +115,7 @@ private:
     friend CookieManager& cookieManager();
 
     CookieManager();
-    ~CookieManager();
+    virtual ~CookieManager();
 
     void checkAndTreatCookie(ParsedCookie*, BackingStoreRemovalPolicy);
 
index a41497d..9fe24e9 100644 (file)
@@ -71,18 +71,6 @@ LayerCompositingThread::LayerCompositingThread(LayerType type, PassRefPtr<LayerT
 {
 }
 
-void LayerCompositingThread::destroyOnCompositingThread()
-{
-    if (!isCompositingThread()) {
-        dispatchSyncCompositingMessage(BlackBerry::Platform::createMethodCallMessage(
-            &LayerCompositingThread::destroyOnCompositingThread,
-            this));
-        return;
-    }
-
-    delete this;
-}
-
 LayerCompositingThread::~LayerCompositingThread()
 {
     ASSERT(isCompositingThread());
index 4d9c291..b847009 100644 (file)
@@ -41,7 +41,7 @@
 #include "LayerTiler.h"
 
 #include <BlackBerryPlatformGuardedPointer.h>
-#include <wtf/ThreadSafeRefCounted.h>
+#include <GuardedPointerDeleter.h>
 
 namespace BlackBerry {
 namespace Platform {
@@ -59,8 +59,6 @@ class LayerCompositingThread : public ThreadSafeRefCounted<LayerCompositingThrea
 public:
     static PassRefPtr<LayerCompositingThread> create(LayerType, PassRefPtr<LayerTiler>);
 
-    ~LayerCompositingThread();
-
     // Thread safe
     void setPluginView(PluginView*);
 #if ENABLE(VIDEO)
@@ -141,12 +139,12 @@ public:
 
     bool hasVisibleHolePunchRect() const;
 
+protected:
+    virtual ~LayerCompositingThread();
+
 private:
     LayerCompositingThread(LayerType, PassRefPtr<LayerTiler>);
 
-    friend class WTF::ThreadSafeRefCounted<WebCore::LayerCompositingThread>;
-    void destroyOnCompositingThread();
-
     void updateTileContents(const IntRect& tile);
 
     void removeFromSuperlayer();
@@ -199,8 +197,12 @@ namespace WTF {
 template<>
 inline void ThreadSafeRefCounted<WebCore::LayerCompositingThread>::deref()
 {
-    if (derefBase())
-        static_cast<WebCore::LayerCompositingThread*>(this)->destroyOnCompositingThread();
+    if (derefBase()) {
+        // Delete on the compositing thread.
+        BlackBerry::Platform::GuardedPointerDeleter::deleteOnThread(
+                BlackBerry::Platform::userInterfaceThreadMessageClient(),
+                static_cast<WebCore::LayerCompositingThread*>(this));
+    }
 }
 
 } // namespace WTF
index 0ab9878..d673474 100644 (file)
@@ -127,7 +127,7 @@ MediaPlayerPrivate::~MediaPlayerPrivate()
         static_cast<VideoLayerWebKitThread*>(m_platformLayer.get())->setMediaPlayer(0);
 #endif
 
-    delete m_platformPlayer;
+    deleteGuardedObject(m_platformPlayer);
 }
 
 void MediaPlayerPrivate::load(const String& url)
index 6a99981..30a3f17 100644 (file)
@@ -2587,7 +2587,7 @@ BackingStore::BackingStore(WebPage* webPage, BackingStoreClient* client)
 
 BackingStore::~BackingStore()
 {
-    delete d;
+    deleteGuardedObject(d);
     d = 0;
 }
 
index 4a10442..c2f909f 100644 (file)
@@ -99,7 +99,6 @@ class BackingStorePrivate : public BlackBerry::Platform::GuardedPointerBase {
 public:
     enum TileMatrixDirection { Horizontal, Vertical };
     BackingStorePrivate();
-    ~BackingStorePrivate();
 
     // Returns whether direct rendering is explicitly turned on or is
     // required because the surface pool is not large enough to meet
@@ -367,6 +366,9 @@ public:
     mutable bool m_needsDrawLayersOnCommit; // Not thread safe, WebKit thread only
     bool m_isDirectRenderingAnimationMessageScheduled;
 #endif
+
+protected:
+    virtual ~BackingStorePrivate();
 };
 } // namespace WebKit
 } // namespace BlackBerry
index 6c6c5c9..a8d0b4e 100644 (file)
@@ -401,7 +401,7 @@ WebPagePrivate::~WebPagePrivate()
 
 WebPage::~WebPage()
 {
-    delete d;
+    deleteGuardedObject(d);
     d = 0;
 }
 
@@ -2906,7 +2906,7 @@ void WebPage::destroy()
     if (loader)
         loader->detachFromParent();
 
-    delete this;
+    deleteGuardedObject(this);
 }
 
 WebPageClient* WebPage::client() const
index 9044afa..76c3863 100644 (file)
@@ -328,7 +328,7 @@ public:
     void destroyWebPageCompositor();
 
 private:
-    ~WebPage();
+    virtual ~WebPage();
 
     friend class WebKit::BackingStore;
     friend class WebKit::BackingStoreClient;
index e0cac05..40f0b04 100644 (file)
@@ -79,7 +79,6 @@ public:
     enum LoadState { None /* on instantiation of page */, Provisional, Committed, Finished, Failed };
 
     WebPagePrivate(WebPage*, WebPageClient*, const WebCore::IntRect&);
-    virtual ~WebPagePrivate();
 
     static WebCore::Page* core(const WebPage*);
 
@@ -534,6 +533,9 @@ public:
     RefPtr<WebCore::DOMWrapperWorld> m_isolatedWorld;
     bool m_hasInRegionScrollableAreas;
     bool m_updateDelegatedOverlaysDispatched;
+
+protected:
+    virtual ~WebPagePrivate();
 };
 }
 }
index 44ae821..0c6a0de 100644 (file)
@@ -1,3 +1,30 @@
+2012-04-11  Joe Mason  <jmason@rim.com>
+
+        [BlackBerry] Update to the thread-safe GuardedPointer API
+        https://bugs.webkit.org/show_bug.cgi?id=83603
+
+        Reviewed by Rob Buis.
+
+        RIM PR: 134984
+        Make the destructors of all objects inheriting GuardedPointerBase protected or
+        private, and delete them using BlackBerry::Platform::deleteGuardedObject.
+        Access all GuardedPointers through GuardedPointerLocker.
+
+        No new tests, refactor.
+
+        Reviewed internally by Yong Li and George Staikos.
+
+        * Api/BackingStore.cpp:
+        (BlackBerry::WebKit::BackingStore::~BackingStore):
+        * Api/BackingStore_p.h:
+        (BackingStorePrivate):
+        * Api/WebPage.cpp:
+        (BlackBerry::WebKit::WebPage::~WebPage):
+        (BlackBerry::WebKit::WebPage::destroy):
+        * Api/WebPage.h:
+        * Api/WebPage_p.h:
+        (WebPagePrivate):
+
 2012-04-10  Arvid Nilsson  <anilsson@rim.com>
 
         [BlackBerry] Crash when tearing down web page rendered using WebPageCompositor