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
-~----------~----~----~----~------~----~------~--~---

Reply via email to