electron: Async/Await crash: assertion env->async_hooks_init_function().IsEmpty() failed
- Electron version: Anything over 1.7.8, until the latest 1.8.2-beta.1
- Node: 8.8.0
- Operating system: high sierra
Going over 1.7.8 seems to break Electron for one of our projects. It’s hard to track down what’s going on but here’s the output:
❯ yarn run electron
yarn run v1.2.1
$ electron .dev/electron.js
/Users/drcmda/dev/stepdoctor/node_modules/electron/dist/Electron.app/Contents/MacOS/Electron[41928]: ../../vendor/node/src/async-wrap.cc:399:void node::SetupHooks(const FunctionCallbackInfo<v8::Value> &): Assertion `env->async_hooks_init_function().IsEmpty()' failed.
1: node::Abort() [/Users/drcmda/dev/stepdoctor/node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libnode.dylib]
2: node::Assert(char const* const (*) [4]) [/Users/drcmda/dev/stepdoctor/node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libnode.dylib]
3: node::AsyncWrap::Initialize(v8::Local<v8::Object>, v8::Local<v8::Value>, v8::Local<v8::Context>) [/Users/drcmda/dev/stepdoctor/node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libnode.dylib]
4: v8::internal::StrDup(char const*) [/Users/drcmda/dev/stepdoctor/node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libnode.dylib]
5: v8::internal::compiler::BranchElimination::ControlPathConditions::operator==(v8::internal::compiler::BranchElimination::ControlPathConditions const&) const [/Users/drcmda/dev/stepdoctor/node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libnode.dylib]
6: v8::internal::compiler::BranchElimination::ControlPathConditions::operator==(v8::internal::compiler::BranchElimination::ControlPathConditions const&) const [/Users/drcmda/dev/stepdoctor/node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libnode.dylib]
7: 0x3eadf51843fd
8: 0x3eadf527777c
9: 0x3eadf523be1c
✨ Done in 0.40s.
It happens when we require a file that has async/await calls in it, but nothing’s yet executed. But the moment we go back to 1.7.8 it starts working again.
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Reactions: 15
- Comments: 29 (11 by maintainers)
Getting a very similar error here on Mac OS high sierra just from importing the unzip package into my project.
electron v1.8.2
Ok folks - I’ve made some headway here. Using an empty Electron project, I’m able to reproduce this by requiring
awv3-node/serveras noted above. To find exactly what source is crashing Node, I:Module._loadlogging the filename it’s about to load.require('awv3-node/server'). The devtools logs a bunch of paths and then hits the assertion failure in the stack trace, but LLDB prevents it from exiting so I can read the console.logs.The file crashing the app is
/Users/bengotow/Work/F376/Projects/Podtastic/node_modules/natives/index.js. It looks like it’s doing some /hella/ sketchy stuff. In the package description, it basically says it’s can and will break your app when Node changes: https://www.npmjs.com/package/natives. Lovely.Rather than figure out what in this (actually very small) package has broken, I think the goal should be to remove it and whatever dependencies are doing such sketch stuff in the first place. In the case of
awv3-node, here’s the full require path to natives (reading down roughly):Stepping through the execution of https://github.com/isaacs/natives/blob/master/index.js, (I just edited the source on disk and added a
debuggerline), it looks like it callsrunInThisContexton sources within NodeJS itself. When it callsrunInThisContextwithnm.filename=async_hooks.js, it retrieves the function, but when it executes it on line 109, the assertion failure occurs and Node crashes.I have the same symptoms.
1.7.8 - No problems. 1.7.9 - I have not tested it.
1.8.1 beta - same error 1.8.2 beta.1 - same error
E:\GitHub_B2LiNK\Development-Binary-Windows\Binary\Electron\electron.exe: c:\projects\electron\vendor\node\src\async-wrap.cc:399: Assertion `env->async_hooks_init_function().IsEmpty()’ failed.
require( “exceljs” ) -> error
It happens on Windows, Mac, and Linux.
I have this issue when trying to use https://www.npmjs.com/package/unzip library:
As a workaround (thanks to @Tyriar) we will probably ship with this code to prevent access to the
nativesmodule which seems to be the main driver of this crash:As a point of clarification, in our experience the root cause of this issue is something that was depending on the natives package.
This package is deprecated and contains warnings of its use. Right from the
nativesREADME:So. Doesn’t seem to be electron’s issue. Heck, this isn’t even a node issue. Packages depending on the
nativesmodule, which is now deprecated and one could even argue - not be used in the first place are the issue.Note:
gulp v3.9.1has this issue. The solution for us was to upgrade togulp 4.We’re having the same issue with 1.8.2.
Linux, debian.
Any workarounds or useful leads discovered yet? Same issue here, with or without babel in the stack.