Hi, all, I am embedding v8 into a c++ program, and when trying to 
initialize an Isolate again, the program crashes.

The way I was doing is made an v8::Isolate as a member field of an JsEngine 
instance,  then call ~JsEngine() and renew a JsEngine instance. In 
~JsEngine(), I do stuff like disposed Isolate, shutdown platform, etc.

This can be reproduced by some modification to samples/hello-world.cc as 
following:

int main(int argc, char* argv[]) {
>
>   // Initialize V8.
>
>   v8::V8::InitializeICUDefaultLocation(argv[0]);
>
>   v8::V8::InitializeExternalStartupData(argv[0]);
>
>   std::unique_ptr<v8::Platform> platform = 
>> v8::platform::NewDefaultPlatform();
>
>   v8::V8::InitializePlatform(platform.get());
>
>   v8::V8::Initialize();
>
>
>>   // Create a new Isolate and make it the current one.
>
>   v8::Isolate::CreateParams create_params;
>
>   create_params.array_buffer_allocator =
>
>       v8::ArrayBuffer::Allocator::NewDefaultAllocator();
>
>   v8::Isolate* isolate = v8::Isolate::New(create_params);
>
>   {
>
>     v8::Isolate::Scope isolate_scope(isolate);
>
>  
                   // -------------------------------------------------

>   // ignore. evaluate some js strings here.
>
>                   //  --------------------------------------------------

>   // Dispose the isolate and tear down V8.
>
>   isolate->Dispose();
>
>   v8::V8::Dispose();
>
>   v8::V8::ShutdownPlatform();
>
>   delete create_params.array_buffer_allocator;
>
>
>>                    // --------------------------------------------------

>   // do it again for testing
>
>                    // -------------------------------------------------- 

>   v8::V8::InitializeICUDefaultLocation(argv[0]);
>
>   v8::V8::InitializeExternalStartupData(argv[0]);
>
>   std::unique_ptr<v8::Platform> platform2 = 
>> v8::platform::NewDefaultPlatform();
>
>   v8::V8::InitializePlatform(platform2.get());
>
>   v8::V8::Initialize();
>
>
>>   // Create a new Isolate and make it the current one.
>
>   v8::Isolate::CreateParams create_params2;
>
>   create_params2.array_buffer_allocator =
>
>       v8::ArrayBuffer::Allocator::NewDefaultAllocator();
>
>   v8::Isolate* isolate2 = v8::Isolate::New(create_params2);  // crash here.
>
>  

>   return 0;
>
> }
>
> The output is like this:

> Hello, World!
>
> 3 + 4 = 7
>
> Segmentation fault (core dumped)
>
>
>
The backtrace looks like this:

>  

#0  __GI___pthread_mutex_lock (mutex=0x128) at 
> ../nptl/pthread_mutex_lock.c:67

#1  0x00000000007f2073 in 
> v8::internal::wasm::WasmEngine::AddIsolate(v8::internal::Isolate*) ()

#2  0x00000000004cadd8 in 
> v8::internal::Isolate::Init(v8::internal::ReadOnlyDeserializer*, 
> v8::internal::StartupDeserializer*) ()

#3  0x00000000004cb2b9 in 
> v8::internal::Isolate::InitWithSnapshot(v8::internal::ReadOnlyDeserializer*, 
> v8::internal::StartupDeserializer*) ()

#4  0x00000000007d4735 in 
> v8::internal::Snapshot::Initialize(v8::internal::Isolate*) ()

#5  0x000000000044abf2 in v8::Isolate::Initialize(v8::Isolate*, 
> v8::Isolate::CreateParams const&) ()

#6  0x000000000044ad42 in v8::Isolate::New(v8::Isolate::CreateParams 
> const&) ()

#7  0x0000000000414a4e in main ()

(gdb) q



Why this behavior will crash, and how to avoid this?

Any hints would be great, Thanks in advance!
 

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-users/08f40c61-000d-4d36-a785-7e642e28ea9a%40googlegroups.com.

Reply via email to