Hi all! 

I've embedded V8 (7.4.288.11 from NuGet) into an C# ASP.NET application. 
There is some glue code that initializes V8 (As per the hello-world sample):

bool result = v8::V8::InitializeICUDefaultLocation(path);
v8::V8::InitializeExternalStartupData(path);
platform = v8::platform::NewDefaultPlatform();
v8::V8::InitializePlatform(platform.get());
v8::V8::Initialize();


This works just fine when called just once. Sometimes, the Initialize code 
ends up being called a second time in the same process. (In this case 
because the AppDomain recycles but the process stays the same).

When executing this code the second time, a crash occurs when 
v8::V8::InitializePlatform(platform.get()); is called the second time:

 Exception #:  0X80000003
 Stack:        
 v8_libbase!v8::base::OS::Abort+0x10
 v8_libbase!V8_Fatal+0xf0
 v8!v8::internal::wasm::WasmEngine::InitializeOncePerProcess+0x14a
 0x7fe`99bca45e
 0x7fe`99bc8648
 clr!LogHelp_LogAssert+0x1f93
{redacted}


My understanding is that calling Initialize the second time should 
effectively be a no-op. Am I wrong? Shutdown is very well documented re: 
you can't re initialize after shutting down, but there isn't much about 
calling Initialize multiple time. The name InitializeOncePerProcess  to me 
implies that my assumption is correct.

My workaround solution is to create a singleton in my glue code that keeps 
track of the state and causes Initialize to be a no-op in my code.


Some background: This was a safe operation on a (very old) version of V8 
(3.16.14)  I'm working on upgrading it. Running in ASP.NET on IIS 10. On an 
AppDomain recycle (not app pool), The managed assemblies are unloaded and 
reloaded (but not the unmanaged ones, thus calling myV8::Initialize).

Thanks!

-- 
-- 
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to