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
+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
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");
friend CookieManager& cookieManager();
CookieManager();
- ~CookieManager();
+ virtual ~CookieManager();
void checkAndTreatCookie(ParsedCookie*, BackingStoreRemovalPolicy);
{
}
-void LayerCompositingThread::destroyOnCompositingThread()
-{
- if (!isCompositingThread()) {
- dispatchSyncCompositingMessage(BlackBerry::Platform::createMethodCallMessage(
- &LayerCompositingThread::destroyOnCompositingThread,
- this));
- return;
- }
-
- delete this;
-}
-
LayerCompositingThread::~LayerCompositingThread()
{
ASSERT(isCompositingThread());
#include "LayerTiler.h"
#include <BlackBerryPlatformGuardedPointer.h>
-#include <wtf/ThreadSafeRefCounted.h>
+#include <GuardedPointerDeleter.h>
namespace BlackBerry {
namespace Platform {
public:
static PassRefPtr<LayerCompositingThread> create(LayerType, PassRefPtr<LayerTiler>);
- ~LayerCompositingThread();
-
// Thread safe
void setPluginView(PluginView*);
#if ENABLE(VIDEO)
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();
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
static_cast<VideoLayerWebKitThread*>(m_platformLayer.get())->setMediaPlayer(0);
#endif
- delete m_platformPlayer;
+ deleteGuardedObject(m_platformPlayer);
}
void MediaPlayerPrivate::load(const String& url)
BackingStore::~BackingStore()
{
- delete d;
+ deleteGuardedObject(d);
d = 0;
}
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
mutable bool m_needsDrawLayersOnCommit; // Not thread safe, WebKit thread only
bool m_isDirectRenderingAnimationMessageScheduled;
#endif
+
+protected:
+ virtual ~BackingStorePrivate();
};
} // namespace WebKit
} // namespace BlackBerry
WebPage::~WebPage()
{
- delete d;
+ deleteGuardedObject(d);
d = 0;
}
if (loader)
loader->detachFromParent();
- delete this;
+ deleteGuardedObject(this);
}
WebPageClient* WebPage::client() const
void destroyWebPageCompositor();
private:
- ~WebPage();
+ virtual ~WebPage();
friend class WebKit::BackingStore;
friend class WebKit::BackingStoreClient;
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*);
RefPtr<WebCore::DOMWrapperWorld> m_isolatedWorld;
bool m_hasInRegionScrollableAreas;
bool m_updateDelegatedOverlaysDispatched;
+
+protected:
+ virtual ~WebPagePrivate();
};
}
}
+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