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

Side by Side Diff: Source/bindings/v8/WorkerScriptController.cpp

Issue 218953002: Oilpan: IDBCursor should be detached from IDBRequest when the IDBRequest stops (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2009, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 95
96 v8::Isolate* m_isolate; 96 v8::Isolate* m_isolate;
97 }; 97 };
98 98
99 WorkerScriptController::~WorkerScriptController() 99 WorkerScriptController::~WorkerScriptController()
100 { 100 {
101 ThreadState::current()->removeInterruptor(m_interruptor.get()); 101 ThreadState::current()->removeInterruptor(m_interruptor.get());
102 102
103 m_world->dispose(); 103 m_world->dispose();
104 104
105 // The corresponding call to didStartWorkerRunLoop is in 105 // We need to collect all dead DOM objects before calling didStopWorkerRunLo op(),
106 // WorkerThread::workerThread(). 106 // because destructors of some DOM objects touch Chromium-side objects
107 // See http://webkit.org/b/83104#c14 for why this is here. 107 // which are destroyed in didStopWorkerRunLoop(). For example, ~IDBRequest() touches
108 // IndexedDBDispatcher which is destroyed in didStopWorkerRunLoop().
109 //
110 // Things should happen in the following order:
111 // (1) Heap::collectAllGarbage()
112 // (2) didStopWorkerRunLoop()
113 // (3) ThreadState::detach()
zerny-chromium 2014/03/31 06:33:10 This also does a full GC. Do we need this both bef
Mads Ager (chromium) 2014/03/31 08:56:53 So, we definitely need the detach call and we have
114 // (4) Isolate destruction
115 // See http://webkit.org/b/83104#c14 for more details.
116 Heap::collectAllGarbage(ThreadState::NoHeapPointersOnStack);
117
118 // The corresponding call to didStartWorkerRunLoop is in WorkerThread::worke rThread().
108 blink::Platform::current()->didStopWorkerRunLoop(blink::WebWorkerRunLoop(&m_ workerGlobalScope.thread()->runLoop())); 119 blink::Platform::current()->didStopWorkerRunLoop(blink::WebWorkerRunLoop(&m_ workerGlobalScope.thread()->runLoop()));
109 120
110 disposeContext(); 121 disposeContext();
111 122
112 ThreadState::current()->addCleanupTask(IsolateCleanupTask::create(m_isolate) ); 123 ThreadState::current()->addCleanupTask(IsolateCleanupTask::create(m_isolate) );
113 } 124 }
114 125
115 void WorkerScriptController::disposeContext() 126 void WorkerScriptController::disposeContext()
116 { 127 {
117 m_perContextData.clear(); 128 m_perContextData.clear();
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 m_disableEvalPending = errorMessage; 268 m_disableEvalPending = errorMessage;
258 } 269 }
259 270
260 void WorkerScriptController::rethrowExceptionFromImportedScript(PassRefPtr<Error Event> errorEvent) 271 void WorkerScriptController::rethrowExceptionFromImportedScript(PassRefPtr<Error Event> errorEvent)
261 { 272 {
262 m_errorEventFromImportedScript = errorEvent; 273 m_errorEventFromImportedScript = errorEvent;
263 throwError(V8ThrowException::createError(v8GeneralError, m_errorEventFromImp ortedScript->message(), m_isolate), m_isolate); 274 throwError(V8ThrowException::createError(v8GeneralError, m_errorEventFromImp ortedScript->message(), m_isolate), m_isolate);
264 } 275 }
265 276
266 } // namespace WebCore 277 } // namespace WebCore
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698