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