Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(635)

Unified Diff: Source/core/dom/Microtask.cpp

Issue 555163005: Deactivate IDBTransactions created within Microtasks (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Remove bogus line, clean up hideous conditional Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/dom/Microtask.h ('k') | Source/core/inspector/AsyncCallStackTracker.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/dom/Microtask.cpp
diff --git a/Source/core/dom/Microtask.cpp b/Source/core/dom/Microtask.cpp
index d2ffaed202eda2bbf59fc1a323e1a94e218ea008..9340c1df4780ce2ef665054201638b4cb02b27e4 100644
--- a/Source/core/dom/Microtask.cpp
+++ b/Source/core/dom/Microtask.cpp
@@ -32,6 +32,7 @@
#include "core/dom/Microtask.h"
#include "bindings/core/v8/V8PerIsolateData.h"
+#include "bindings/core/v8/V8RecursionScope.h"
#include "platform/Task.h"
#include "public/platform/WebThread.h"
#include <v8.h>
@@ -43,13 +44,22 @@ void Microtask::performCheckpoint()
v8::Isolate* isolate = v8::Isolate::GetCurrent();
V8PerIsolateData* isolateData = V8PerIsolateData::from(isolate);
ASSERT(isolateData);
- if (isolateData->recursionLevel() || isolateData->performingMicrotaskCheckpoint())
+ if (isolateData->recursionLevel() || isolateData->performingMicrotaskCheckpoint() || isolateData->destructionPending())
return;
isolateData->setPerformingMicrotaskCheckpoint(true);
- isolate->RunMicrotasks();
+ {
+ // Ensure that end-of-task-or-microtask actions are performed.
+ V8RecursionScope recursionScope(isolate);
+ isolate->RunMicrotasks();
+ }
isolateData->setPerformingMicrotaskCheckpoint(false);
}
+bool Microtask::performingCheckpoint(v8::Isolate* isolate)
+{
+ return V8PerIsolateData::from(isolate)->performingMicrotaskCheckpoint();
+}
+
static void microtaskFunctionCallback(void* data)
{
OwnPtr<WebThread::Task> task = adoptPtr(static_cast<WebThread::Task*>(data));
« no previous file with comments | « Source/core/dom/Microtask.h ('k') | Source/core/inspector/AsyncCallStackTracker.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698