Title: [139518] trunk/Source/WebCore
Revision
139518
Author
[email protected]
Date
2013-01-11 16:12:55 -0800 (Fri, 11 Jan 2013)

Log Message

IndexedDB: IDBTransaction should manage lifetime of IDBRequests
https://bugs.webkit.org/show_bug.cgi?id=106678

Reviewed by Tony Chang.

Ensure reference count of IDBRequests don't bounce off zero if there are no script
references are while the events are arriving.

No new tests - no detectable behavior changes.

* Modules/indexeddb/IDBRequest.cpp:
(WebCore::IDBRequest::create): Register with transaction (which now takes a ref) here to...
(WebCore::IDBRequest::IDBRequest): ...avoid having to relax adoption requirements here.
* Modules/indexeddb/IDBTransaction.cpp: Keep RefPtr<>s to outstanding requests.
(WebCore::IDBTransaction::~IDBTransaction):
(WebCore::IDBTransaction::abort):
(WebCore::IDBTransaction::onAbort):
* Modules/indexeddb/IDBTransaction.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (139517 => 139518)


--- trunk/Source/WebCore/ChangeLog	2013-01-12 00:10:59 UTC (rev 139517)
+++ trunk/Source/WebCore/ChangeLog	2013-01-12 00:12:55 UTC (rev 139518)
@@ -1,3 +1,24 @@
+2013-01-11  Joshua Bell  <[email protected]>
+
+        IndexedDB: IDBTransaction should manage lifetime of IDBRequests
+        https://bugs.webkit.org/show_bug.cgi?id=106678
+
+        Reviewed by Tony Chang.
+
+        Ensure reference count of IDBRequests don't bounce off zero if there are no script
+        references are while the events are arriving.
+
+        No new tests - no detectable behavior changes.
+
+        * Modules/indexeddb/IDBRequest.cpp:
+        (WebCore::IDBRequest::create): Register with transaction (which now takes a ref) here to...
+        (WebCore::IDBRequest::IDBRequest): ...avoid having to relax adoption requirements here.
+        * Modules/indexeddb/IDBTransaction.cpp: Keep RefPtr<>s to outstanding requests.
+        (WebCore::IDBTransaction::~IDBTransaction):
+        (WebCore::IDBTransaction::abort):
+        (WebCore::IDBTransaction::onAbort):
+        * Modules/indexeddb/IDBTransaction.h:
+
 2013-01-11  James Simonsen  <[email protected]>
 
         [Resource Timing] XMLHttpRequests should have initiator type 'xmlhttprequest'

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp (139517 => 139518)


--- trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp	2013-01-12 00:10:59 UTC (rev 139517)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp	2013-01-12 00:12:55 UTC (rev 139518)
@@ -49,6 +49,9 @@
 {
     RefPtr<IDBRequest> request(adoptRef(new IDBRequest(context, source, IDBTransactionBackendInterface::NormalTask, transaction)));
     request->suspendIfNeeded();
+    // Requests associated with IDBFactory (open/deleteDatabase/getDatabaseNames) are not associated with transactions.
+    if (transaction)
+        transaction->registerRequest(request.get());
     return request.release();
 }
 
@@ -56,6 +59,9 @@
 {
     RefPtr<IDBRequest> request(adoptRef(new IDBRequest(context, source, taskType, transaction)));
     request->suspendIfNeeded();
+    // Requests associated with IDBFactory (open/deleteDatabase/getDatabaseNames) are not associated with transactions.
+    if (transaction)
+        transaction->registerRequest(request.get());
     return request.release();
 }
 
@@ -78,10 +84,6 @@
     , m_preventPropagation(false)
     , m_requestState(context)
 {
-    // Requests associated with IDBFactory (open/deleteDatabase/getDatabaseNames) are not
-    // associated with transactions.
-    if (m_transaction)
-        m_transaction->registerRequest(this);
 }
 
 IDBRequest::~IDBRequest()

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp (139517 => 139518)


--- trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp	2013-01-12 00:10:59 UTC (rev 139517)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp	2013-01-12 00:12:55 UTC (rev 139518)
@@ -120,6 +120,7 @@
 IDBTransaction::~IDBTransaction()
 {
     ASSERT(m_state == Finished);
+    ASSERT(m_requestList.isEmpty());
 }
 
 const String& IDBTransaction::mode() const
@@ -223,7 +224,7 @@
     m_state = Finishing;
 
     while (!m_requestList.isEmpty()) {
-        IDBRequest* request = *m_requestList.begin();
+        RefPtr<IDBRequest> request = *m_requestList.begin();
         m_requestList.remove(request);
         request->abort();
     }
@@ -300,7 +301,7 @@
         // Abort was not triggered by front-end, so outstanding requests must
         // be aborted now.
         while (!m_requestList.isEmpty()) {
-            IDBRequest* request = *m_requestList.begin();
+            RefPtr<IDBRequest> request = *m_requestList.begin();
             m_requestList.remove(request);
             request->abort();
         }

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h (139517 => 139518)


--- trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h	2013-01-12 00:10:59 UTC (rev 139517)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h	2013-01-12 00:12:55 UTC (rev 139518)
@@ -162,7 +162,7 @@
     RefPtr<DOMError> m_error;
     String m_errorMessage;
 
-    ListHashSet<IDBRequest*> m_requestList;
+    ListHashSet<RefPtr<IDBRequest> > m_requestList;
 
     typedef HashMap<String, RefPtr<IDBObjectStore> > IDBObjectStoreMap;
     IDBObjectStoreMap m_objectStoreMap;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to