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
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.