Index: src/api.cc |
=================================================================== |
--- src/api.cc (revision 1364) |
+++ src/api.cc (working copy) |
@@ -376,7 +376,9 @@ |
void V8::DisposeGlobal(void** obj) { |
LOG_API("DisposeGlobal"); |
if (has_shut_down) return; |
- i::GlobalHandles::Destroy(reinterpret_cast<i::Object**>(obj)); |
+ i::Object** ptr = reinterpret_cast<i::Object**>(obj); |
+ if ((*ptr)->IsGlobalContext()) i::Heap::NotifyContextDisposed(); |
+ i::GlobalHandles::Destroy(ptr); |
} |
// --- H a n d l e s --- |
@@ -2207,6 +2209,9 @@ |
LOG_API("Context::New"); |
ON_BAILOUT("v8::Context::New()", return Persistent<Context>()); |
+ // Give the heap a chance to cleanup if we've disposed contexts. |
+ i::Heap::CollectAllGarbageIfContextDisposed(); |
+ |
v8::Handle<ObjectTemplate> proxy_template = global_template; |
i::Handle<i::FunctionTemplateInfo> proxy_constructor; |
i::Handle<i::FunctionTemplateInfo> global_constructor; |