"InitializeOncePerProcess" means it only *needs* to be called once. I have no idea whether calling it repeatedly is supposed to work. Maybe it would be easy to make it work -- that's why it would be interesting to know what exactly is causing the crash. If it's easier for you to work around it, then I suppose you might as well just do that.
On Tue, Apr 16, 2019 at 10:38 PM <[email protected]> wrote: > Thanks for the reply! > > I'm currently pulling down the v8 binaries from Nuget, so building V8 in > Debug mode would take some effort (I'll have to figure it out! - hopefully > https://github.com/pmed/v8-nuget is all i need). > > I guess my main question is whether or not Initialize can be called more > than once (ie. what does InitializeOncePerProcess means). If it can only be > called once by design, then that's that. If not, then this is worth > investigating further. > > Andrei > > On Tuesday, 16 April 2019 05:00:32 UTC-4, Jakob Kummerow wrote: >> >> From the stack trace, it looks like you ran into a CHECK or DCHECK. If >> you compile in Debug mode and run in a debugger, you should be able to find >> out which (D)CHECK it was, which should shed some light onto what's going >> on. >> >> On Tue, Apr 16, 2019 at 12:13 AM <[email protected]> wrote: >> >>> 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.
