Fix multiple V8::Dispose calls since r16563.
R=svenpanne@chromium.org BUG=v8:2744 TEST=cctest/test-api/InitializeAndDisposeMultiple Review URL: https://codereview.chromium.org/23775007 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16565 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
43780dbdc9
commit
15f6fdeb3e
@ -1383,6 +1383,7 @@ class Isolate {
|
||||
friend class v8::Isolate;
|
||||
friend class v8::Locker;
|
||||
friend class v8::Unlocker;
|
||||
friend class V8;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(Isolate);
|
||||
};
|
||||
|
14
src/v8.cc
14
src/v8.cc
@ -63,8 +63,8 @@ bool V8::Initialize(Deserializer* des) {
|
||||
|
||||
// The current thread may not yet had entered an isolate to run.
|
||||
// Note the Isolate::Current() may be non-null because for various
|
||||
// initialization purposes an initializing thread may be assigned an isolate
|
||||
// but not actually enter it.
|
||||
// initialization purposes an initializing thread may be assigned an
|
||||
// isolate but not actually enter it.
|
||||
if (i::Isolate::CurrentPerIsolateThreadData() == NULL) {
|
||||
i::Isolate::EnterDefaultIsolate();
|
||||
}
|
||||
@ -84,6 +84,15 @@ bool V8::Initialize(Deserializer* des) {
|
||||
|
||||
|
||||
void V8::TearDown() {
|
||||
// The current thread may not yet had entered an isolate to run or may
|
||||
// have already disposed the entered isolated before.
|
||||
// Note the Isolate::Current() may be non-null because for various
|
||||
// initialization purposes an initializing thread may be assigned an
|
||||
// isolate but not actually enter it.
|
||||
if (i::Isolate::CurrentPerIsolateThreadData() == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
Isolate* isolate = Isolate::Current();
|
||||
ASSERT(isolate->IsDefaultIsolate());
|
||||
if (!isolate->IsInitialized()) return;
|
||||
@ -91,6 +100,7 @@ void V8::TearDown() {
|
||||
// The isolate has to be torn down before clearing the LOperand
|
||||
// caches so that the optimizing compiler thread (if running)
|
||||
// doesn't see an inconsistent view of the lithium instructions.
|
||||
Isolate::SetIsolateThreadLocals(isolate, NULL);
|
||||
isolate->TearDown();
|
||||
delete isolate;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user