Hi, All,
I have declared v8::V8::IgnoreOutOfMemoryException(), and the out of
memory exception is caught by trycatch as expected.
However, after disposing the current context, we can't create a new
context.
The handle is empty.
Please check the following UT case:
Reproduction steps
---------------------------------------------------------
Please add the following case to test-api.cc,
When creating a new context,
v8::Persistent<v8::Context> context = v8::Context::New(0,
v8::Handle<v8::ObjectTemplate>(), v8::Handle<v8::Value>());
It will fail
TEST(CreateNewContextAfterOutOfMemory) {
// It's not possible to read a snapshot into a heap with different
dimensions.
if (v8::internal::Snapshot::IsEnabled()) return;
// Set heap limits.
static const int K = 1024;
v8::ResourceConstraints constraints;
constraints.set_max_young_space_size(256 * K);
constraints.set_max_old_space_size(4 * K * K);
v8::SetResourceConstraints(&constraints);
// Execute a script that causes out of memory.
v8::HandleScope scope;
{
LocalContext context;
v8::V8::IgnoreOutOfMemoryException();
Local<Script> script =
Script::Compile(String::New(js_code_causing_out_of_memory));
Local<Value> result = script->Run();
// Check for out of memory state.
CHECK(result.IsEmpty());
CHECK(context->HasOutOfMemoryException());
}
{
v8::Persistent<v8::Context> context = v8::Context::New(0,
v8::Handle<v8::ObjectTemplate>(), v8::Handle<v8::Value>());
//Check here!
//I think we should be allowed to create a new context
//And the Handle should not be empty
CHECK(!context.IsEmpty());
context.Dispose();
context.Clear();
}
}
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---