Chromium Code Reviews| Index: src/v8.cc |
| diff --git a/src/v8.cc b/src/v8.cc |
| index d9ce8404acddea3391c511ee03ce20e475a27055..c4ce0629c8021b89d39f59c8703dc64371330bb8 100644 |
| --- a/src/v8.cc |
| +++ b/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); |
|
Sven Panne
2013/09/06 10:48:27
This looks a bit strange, but to be honest, I don'
|
| isolate->TearDown(); |
| delete isolate; |