⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 118627 in webkit


Ignore:
Timestamp:
May 27, 2012, 7:54:52 AM (14 years ago)
Author:
commit-queue@webkit.org
Message:

[BlackBerry] Crash when deleting WebPageCompositor
https://bugs.webkit.org/show_bug.cgi?id=87589

Patch by Arvid Nilsson <anilsson@rim.com> on 2012-05-27
Reviewed by Rob Buis.

The WebPageCompositorPrivate is reference counted, so it may outlive
either the WebPage or the WebPageCompositor, depending on who releases
its reference first.

Fixed by disconnecting the objects properly, regardless of who goes
away first.

Reviewed internally by Mike Lattanzio.

PR #156444

  • Api/WebPage.cpp:

(BlackBerry::WebKit::WebPagePrivate::setCompositor):
(BlackBerry::WebKit::WebPagePrivate::destroyCompositor):

  • Api/WebPageCompositor.cpp:

(BlackBerry::WebKit::WebPageCompositor::~WebPageCompositor):
(BlackBerry::WebKit::WebPageCompositor::client):

  • Api/WebPageCompositor_p.h:

(BlackBerry::WebKit::WebPageCompositorPrivate::setPage):

Location:
trunk/Source/WebKit/blackberry
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/blackberry/Api/WebPage.cpp

    r118530 r118627  
    56315631
    56325632    m_compositor = compositor;
     5633    if (m_compositor)
     5634        m_compositor->setPage(this);
    56335635
    56345636    // The previous compositor, if any, has now released it's OpenGL resources,
     
    58635865        return;
    58645866
     5867    // m_compositor is a RefPtr, so it may live on beyond this point.
     5868    // Disconnect the compositor from us
     5869    m_compositor->setPage(0);
    58655870    m_compositor.clear();
    58665871    m_ownedContext.clear();
  • trunk/Source/WebKit/blackberry/Api/WebPageCompositor.cpp

    r118625 r118627  
    191191    using namespace BlackBerry::Platform;
    192192
    193     webKitThreadMessageClient()->dispatchMessage(createMethodCallMessage(&WebPagePrivate::setCompositor, d->page(), PassRefPtr<WebPageCompositorPrivate>(0)));
     193    // If we're being destroyed before the page, send a message to disconnect us
     194    if (d->page())
     195        webKitThreadMessageClient()->dispatchMessage(createMethodCallMessage(&WebPagePrivate::setCompositor, d->page(), PassRefPtr<WebPageCompositorPrivate>(0)));
    194196    d->compositorDestroyed();
    195197    d->deref();
     
    198200WebPageCompositorClient* WebPageCompositor::client() const
    199201{
    200     return 0;
     202    return d->client();
    201203}
    202204
  • trunk/Source/WebKit/blackberry/Api/WebPageCompositor_p.h

    r114624 r118627  
    8383
    8484    WebPagePrivate* page() const { return m_webPage; }
     85    void setPage(WebPagePrivate* page) { m_webPage = page; }
    8586    WebPageCompositorClient* client() const { return m_client; }
    8687    void compositorDestroyed();
  • trunk/Source/WebKit/blackberry/ChangeLog

    r118626 r118627  
     12012-05-27  Arvid Nilsson  <anilsson@rim.com>
     2
     3        [BlackBerry] Crash when deleting WebPageCompositor
     4        https://bugs.webkit.org/show_bug.cgi?id=87589
     5
     6        Reviewed by Rob Buis.
     7
     8        The WebPageCompositorPrivate is reference counted, so it may outlive
     9        either the WebPage or the WebPageCompositor, depending on who releases
     10        its reference first.
     11
     12        Fixed by disconnecting the objects properly, regardless of who goes
     13        away first.
     14
     15        Reviewed internally by Mike Lattanzio.
     16
     17        PR #156444
     18
     19        * Api/WebPage.cpp:
     20        (BlackBerry::WebKit::WebPagePrivate::setCompositor):
     21        (BlackBerry::WebKit::WebPagePrivate::destroyCompositor):
     22        * Api/WebPageCompositor.cpp:
     23        (BlackBerry::WebKit::WebPageCompositor::~WebPageCompositor):
     24        (BlackBerry::WebKit::WebPageCompositor::client):
     25        * Api/WebPageCompositor_p.h:
     26        (BlackBerry::WebKit::WebPageCompositorPrivate::setPage):
     27
    1282012-05-27  Arvid Nilsson  <anilsson@rim.com>
    229
Note: See TracChangeset for help on using the changeset viewer.