Title: [202019] trunk
- Revision
- 202019
- Author
- [email protected]
- Date
- 2016-06-13 17:34:11 -0700 (Mon, 13 Jun 2016)
Log Message
storage/indexeddb/modern/leaks-1.html leaks the database connection handle.
https://bugs.webkit.org/show_bug.cgi?id=158643
Reviewed by Alex Christensen.
Source/WebCore:
Tested by changes to existing test.
* Modules/indexeddb/IDBDatabase.cpp:
(WebCore::IDBDatabase::hasPendingActivity):
* dom/EventTarget.h:
(WebCore::EventTarget::eventTargetData):
(WebCore::EventTarget::hasEventListeners):
LayoutTests:
* storage/indexeddb/modern/leak-1-expected.txt:
* storage/indexeddb/modern/resources/leak-1.js:
Modified Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (202018 => 202019)
--- trunk/LayoutTests/ChangeLog 2016-06-14 00:17:44 UTC (rev 202018)
+++ trunk/LayoutTests/ChangeLog 2016-06-14 00:34:11 UTC (rev 202019)
@@ -1,3 +1,13 @@
+2016-06-13 Brady Eidson <[email protected]>
+
+ storage/indexeddb/modern/leaks-1.html leaks the database connection handle.
+ https://bugs.webkit.org/show_bug.cgi?id=158643
+
+ Reviewed by Alex Christensen.
+
+ * storage/indexeddb/modern/leak-1-expected.txt:
+ * storage/indexeddb/modern/resources/leak-1.js:
+
2016-06-13 Adam Bergkvist <[email protected]>
WebRTC: Add test that verifies that RTCPeerConnection.addTrack can reuse an existing RTCRtpSender
Modified: trunk/LayoutTests/storage/indexeddb/modern/leak-1-expected.txt (202018 => 202019)
--- trunk/LayoutTests/storage/indexeddb/modern/leak-1-expected.txt 2016-06-14 00:17:44 UTC (rev 202018)
+++ trunk/LayoutTests/storage/indexeddb/modern/leak-1-expected.txt 2016-06-14 00:34:11 UTC (rev 202019)
@@ -12,6 +12,10 @@
Observing GC on the transaction and request.
PASS txObserver.wasCollected is true
PASS reqObserver.wasCollected is true
+PASS versionChangeObserver.wasCollected is true
+PASS dbObserver.wasCollected is true
+PASS openRequestObserver.wasCollected is true
+PASS objectStoreObserver.wasCollected is true
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/storage/indexeddb/modern/resources/leak-1.js (202018 => 202019)
--- trunk/LayoutTests/storage/indexeddb/modern/resources/leak-1.js 2016-06-14 00:17:44 UTC (rev 202018)
+++ trunk/LayoutTests/storage/indexeddb/modern/resources/leak-1.js 2016-06-14 00:34:11 UTC (rev 202019)
@@ -19,13 +19,22 @@
}
var db;
+var versionChangeObserver;
+var dbObserver;
+var openRequestObserver;
+var objectStoreObserver;
function prepareDatabase(event)
{
debug("Initial upgrade needed: Old version - " + event.oldVersion + " New version - " + event.newVersion);
+ versionChangeObserver = internals.observeGC(event.target.transaction);
+ dbObserver = internals.observeGC(event.target.result);
+ openRequestObserver = internals.observeGC(event.target);
+
db = event.target.result;
- db.createObjectStore("foo");
+ objectStoreObserver = internals.observeGC(db.createObjectStore("foo"));
+
event.target._onsuccess_ = function() {
testGenerator = testSteps();
testGenerator.next();
@@ -51,6 +60,7 @@
tx = null;
req = null;
+ db = null;
// Make sure we are no longer handling any IDB events.
asyncNext();
@@ -60,6 +70,10 @@
shouldBeTrue("txObserver.wasCollected");
shouldBeTrue("reqObserver.wasCollected");
+ shouldBeTrue("versionChangeObserver.wasCollected");
+ shouldBeTrue("dbObserver.wasCollected");
+ shouldBeTrue("openRequestObserver.wasCollected");
+ shouldBeTrue("objectStoreObserver.wasCollected");
finishJSTest();
}
Modified: trunk/Source/WebCore/ChangeLog (202018 => 202019)
--- trunk/Source/WebCore/ChangeLog 2016-06-14 00:17:44 UTC (rev 202018)
+++ trunk/Source/WebCore/ChangeLog 2016-06-14 00:34:11 UTC (rev 202019)
@@ -1,3 +1,20 @@
+2016-06-13 Brady Eidson <[email protected]>
+
+ storage/indexeddb/modern/leaks-1.html leaks the database connection handle.
+ https://bugs.webkit.org/show_bug.cgi?id=158643
+
+ Reviewed by Alex Christensen.
+
+ Tested by changes to existing test.
+
+ * Modules/indexeddb/IDBDatabase.cpp:
+ (WebCore::IDBDatabase::hasPendingActivity):
+
+ * dom/EventTarget.h:
+ (WebCore::EventTarget::eventTargetData):
+ (WebCore::EventTarget::hasEventListeners):
+
+
2016-06-13 Enrica Casucci <[email protected]>
REGRESSION(r201956): Failure to initialize new internal settings produced random test failures in release.
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp (202018 => 202019)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp 2016-06-14 00:17:44 UTC (rev 202018)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp 2016-06-14 00:34:11 UTC (rev 202019)
@@ -68,7 +68,14 @@
bool IDBDatabase::hasPendingActivity() const
{
ASSERT(currentThread() == originThreadID());
- return !m_closedInServer;
+
+ if (m_closedInServer)
+ return false;
+
+ if (!m_activeTransactions.isEmpty() || !m_committingTransactions.isEmpty() || !m_abortingTransactions.isEmpty())
+ return true;
+
+ return hasEventListeners(eventNames().abortEvent) || hasEventListeners(eventNames().errorEvent) || hasEventListeners(eventNames().versionchangeEvent);
}
const String IDBDatabase::name() const
Modified: trunk/Source/WebCore/dom/EventTarget.h (202018 => 202019)
--- trunk/Source/WebCore/dom/EventTarget.h 2016-06-14 00:17:44 UTC (rev 202018)
+++ trunk/Source/WebCore/dom/EventTarget.h 2016-06-14 00:34:11 UTC (rev 202019)
@@ -158,7 +158,7 @@
EventListener* getAttributeEventListener(const AtomicString& eventType);
bool hasEventListeners() const;
- bool hasEventListeners(const AtomicString& eventType);
+ bool hasEventListeners(const AtomicString& eventType) const;
bool hasCapturingEventListeners(const AtomicString& eventType);
bool hasActiveEventListeners(const AtomicString& eventType) const;
const EventListenerVector& getEventListeners(const AtomicString& eventType);
@@ -176,6 +176,10 @@
virtual EventTargetData* eventTargetData() = 0;
virtual EventTargetData& ensureEventTargetData() = 0;
+ const EventTargetData* eventTargetData() const
+ {
+ return const_cast<EventTarget*>(this)->eventTargetData();
+ }
private:
virtual void refEventTarget() = 0;
@@ -217,9 +221,9 @@
return !d->eventListenerMap.isEmpty();
}
-inline bool EventTarget::hasEventListeners(const AtomicString& eventType)
+inline bool EventTarget::hasEventListeners(const AtomicString& eventType) const
{
- EventTargetData* d = eventTargetData();
+ const EventTargetData* d = eventTargetData();
if (!d)
return false;
return d->eventListenerMap.contains(eventType);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes