Changeset 196313 in webkit


Ignore:
Timestamp:
Feb 9, 2016 9:40:43 AM (8 years ago)
Author:
beidson@apple.com
Message:

Modern IDB: IDBOpenDBRequests leak.
https://bugs.webkit.org/show_bug.cgi?id=154032

Reviewed by Alex Christensen.

No new tests (Currently untestable).

  • CMakeLists.txt:
  • WebCore.xcodeproj/project.pbxproj:

Add a simple Event subclass that holds a ref to an IDBRequest, to make sure that we
drop the last ref to the request after its last event fires or is otherwise destroyed:

  • Modules/indexeddb/IDBRequestCompletionEvent.cpp: Added.

(WebCore::IDBRequestCompletionEvent::IDBRequestCompletionEvent):

  • Modules/indexeddb/IDBRequestCompletionEvent.h: Added.

(WebCore::IDBRequestCompletionEvent::create):

  • Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:

(WebCore::IDBClient::IDBOpenDBRequest::onError): IDBRequestCompletionEvent instead of Event.
(WebCore::IDBClient::IDBOpenDBRequest::fireSuccessAfterVersionChangeCommit): Ditto.
(WebCore::IDBClient::IDBOpenDBRequest::fireErrorAfterVersionChangeCompletion): Ditto.
(WebCore::IDBClient::IDBOpenDBRequest::onSuccess): Ditto.

  • Modules/indexeddb/client/IDBTransactionImpl.cpp:

(WebCore::IDBClient::IDBTransaction::dispatchEvent): After setting up the request's

completion event to fire, clear the back-ref to the request.

Location:
trunk/Source/WebCore
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r196136 r196313  
    847847    Modules/indexeddb/IDBOpenDBRequest.cpp
    848848    Modules/indexeddb/IDBRequest.cpp
     849    Modules/indexeddb/IDBRequestCompletionEvent.cpp
    849850    Modules/indexeddb/IDBTransaction.cpp
    850851    Modules/indexeddb/IDBVersionChangeEvent.cpp
  • trunk/Source/WebCore/ChangeLog

    r196308 r196313  
     12016-02-09  Brady Eidson  <beidson@apple.com>
     2
     3        Modern IDB: IDBOpenDBRequests leak.
     4        https://bugs.webkit.org/show_bug.cgi?id=154032
     5
     6        Reviewed by Alex Christensen.
     7
     8        No new tests (Currently untestable).
     9
     10        * CMakeLists.txt:
     11        * WebCore.xcodeproj/project.pbxproj:
     12
     13        Add a simple Event subclass that holds a ref to an IDBRequest, to make sure that we
     14        drop the last ref to the request after its last event fires or is otherwise destroyed:
     15        * Modules/indexeddb/IDBRequestCompletionEvent.cpp: Added.
     16        (WebCore::IDBRequestCompletionEvent::IDBRequestCompletionEvent):
     17        * Modules/indexeddb/IDBRequestCompletionEvent.h: Added.
     18        (WebCore::IDBRequestCompletionEvent::create):
     19
     20        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
     21        (WebCore::IDBClient::IDBOpenDBRequest::onError): IDBRequestCompletionEvent instead of Event.
     22        (WebCore::IDBClient::IDBOpenDBRequest::fireSuccessAfterVersionChangeCommit): Ditto.
     23        (WebCore::IDBClient::IDBOpenDBRequest::fireErrorAfterVersionChangeCompletion): Ditto.
     24        (WebCore::IDBClient::IDBOpenDBRequest::onSuccess): Ditto.
     25
     26        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
     27        (WebCore::IDBClient::IDBTransaction::dispatchEvent): After setting up the request's
     28          completion event to fire, clear the back-ref to the request.
     29
    1302016-02-09  Commit Queue  <commit-queue@webkit.org>
    231
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp

    r194904 r196313  
    3131#include "IDBDatabaseImpl.h"
    3232#include "IDBError.h"
     33#include "IDBRequestCompletionEvent.h"
    3334#include "IDBResultData.h"
    3435#include "IDBTransactionImpl.h"
     
    6667{
    6768    m_domError = DOMError::create(data.error().name());
    68     enqueueEvent(Event::create(eventNames().errorEvent, true, true));
     69    enqueueEvent(IDBRequestCompletionEvent::create(eventNames().errorEvent, true, true, *this));
    6970}
    7071
     
    8586    m_transaction->addRequest(*this);
    8687
    87     auto event = Event::create(eventNames().successEvent, false, false);
     88    auto event = IDBRequestCompletionEvent::create(eventNames().successEvent, false, false, *this);
    8889    m_openDatabaseSuccessEvent = &event.get();
    8990
     
    102103
    103104    m_transaction->addRequest(*this);
    104     enqueueEvent(Event::create(eventNames().errorEvent, true, true));
     105    enqueueEvent(IDBRequestCompletionEvent::create(eventNames().errorEvent, true, true, *this));
    105106}
    106107
     
    126127    m_readyState = IDBRequestReadyState::Done;
    127128
    128     enqueueEvent(Event::create(eventNames().successEvent, false, false));
     129    enqueueEvent(IDBRequestCompletionEvent::create(eventNames().successEvent, false, false, *this));
    129130}
    130131
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBTransactionImpl.cpp

    r195443 r196313  
    443443                m_openDBRequest->fireSuccessAfterVersionChangeCommit();
    444444        }
     445
     446        m_openDBRequest = nullptr;
    445447    }
    446448
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r196281 r196313  
    19801980                5141298E1C5FD83A0059E714 /* JSIDBCursorWithValueCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5141298D1C5FD7E90059E714 /* JSIDBCursorWithValueCustom.cpp */; };
    19811981                514129901C601ACC0059E714 /* ScopeGuard.h in Headers */ = {isa = PBXBuildFile; fileRef = 5141298F1C601A890059E714 /* ScopeGuard.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1982                514129981C6976900059E714 /* IDBRequestCompletionEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514129961C6976150059E714 /* IDBRequestCompletionEvent.cpp */; };
     1983                514129991C6976900059E714 /* IDBRequestCompletionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 514129971C6976150059E714 /* IDBRequestCompletionEvent.h */; };
    19821984                5145B1091BC48E2E00E86219 /* IDBResourceIdentifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5145B1071BC4890B00E86219 /* IDBResourceIdentifier.cpp */; };
    19831985                5145B10A1BC48E2E00E86219 /* IDBResourceIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 5145B1081BC4890B00E86219 /* IDBResourceIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    94759477                5141298D1C5FD7E90059E714 /* JSIDBCursorWithValueCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBCursorWithValueCustom.cpp; sourceTree = "<group>"; };
    94769478                5141298F1C601A890059E714 /* ScopeGuard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScopeGuard.h; sourceTree = "<group>"; };
     9479                514129961C6976150059E714 /* IDBRequestCompletionEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBRequestCompletionEvent.cpp; sourceTree = "<group>"; };
     9480                514129971C6976150059E714 /* IDBRequestCompletionEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBRequestCompletionEvent.h; sourceTree = "<group>"; };
    94779481                5145B1071BC4890B00E86219 /* IDBResourceIdentifier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBResourceIdentifier.cpp; sourceTree = "<group>"; };
    94789482                5145B1081BC4890B00E86219 /* IDBResourceIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBResourceIdentifier.h; sourceTree = "<group>"; };
     
    1948219486                                51645B4F1B9F889B00F789CE /* IDBRequest.h */,
    1948319487                                51D719A3181106E00016DC51 /* IDBRequest.idl */,
     19488                                514129961C6976150059E714 /* IDBRequestCompletionEvent.cpp */,
     19489                                514129971C6976150059E714 /* IDBRequestCompletionEvent.h */,
    1948419490                                510A326E18318431003C5326 /* IDBServerConnection.h */,
    1948519491                                51645B501B9F889B00F789CE /* IDBTransaction.cpp */,
     
    2760927615                                AB7170890B3118080017123E /* SearchPopupMenu.h in Headers */,
    2761027616                                0E7058F41BC5CEDA0045A507 /* SearchPopupMenuCocoa.h in Headers */,
     27617                                514129991C6976900059E714 /* IDBRequestCompletionEvent.h in Headers */,
    2761127618                                976F36EB14686225005E93B4 /* SecurityContext.h in Headers */,
    2761227619                                BCD0E0FB0E972C3500265DEA /* SecurityOrigin.h in Headers */,
     
    2881828825                                BE88E0D81715D2A200658D98 /* AudioTrack.cpp in Sources */,
    2881928826                                BE88E0DB1715D2A200658D98 /* AudioTrackList.cpp in Sources */,
     28827                                514129981C6976900059E714 /* IDBRequestCompletionEvent.cpp in Sources */,
    2882028828                                CDE3A85717F6020400C5BE20 /* AudioTrackPrivateAVFObjC.mm in Sources */,
    2882128829                                CD54A762180F9F7000B076C9 /* AudioTrackPrivateMediaSourceAVFObjC.cpp in Sources */,
Note: See TracChangeset for help on using the changeset viewer.