mirror of
https://github.com/enso-org/enso.git
synced 2024-12-23 17:34:10 +03:00
Handling exceptions in IDE main to avoid entering "zombie process" state. (#3648)
This is meant to address https://www.pivotaltracker.com/story/show/182691027.
This commit is contained in:
parent
0dbbbaad00
commit
6c82588972
@ -54,6 +54,9 @@
|
||||
methods, atoms and functions are presented in nice, categorized view. The most
|
||||
popular tools are available at hand. The The panel is unstable, and thus is
|
||||
available under the `--enable-new-component-browser` flag.
|
||||
- [Fixed error handling during startup.][3648] This prevents entering IDE into a
|
||||
"zombie" state, where processes were started but not visible to user. They
|
||||
could cause issues with starting further IDE instances.
|
||||
|
||||
#### EnsoGL (rendering engine)
|
||||
|
||||
@ -273,6 +276,7 @@
|
||||
[3601]: https://github.com/enso-org/enso/pull/3601
|
||||
[3617]: https://github.com/enso-org/enso/pull/3617
|
||||
[3629]: https://github.com/enso-org/enso/pull/3629
|
||||
[3648]: https://github.com/enso-org/enso/pull/3648
|
||||
|
||||
#### Enso Compiler
|
||||
|
||||
|
@ -476,7 +476,10 @@ let mainWindow = null
|
||||
let origin = null
|
||||
|
||||
async function main(args) {
|
||||
// Note [Main error handling]
|
||||
try {
|
||||
runBackend()
|
||||
|
||||
console.log('Starting the IDE service.')
|
||||
if (args.server !== false) {
|
||||
let serverCfg = Object.assign({}, args)
|
||||
@ -495,8 +498,24 @@ async function main(args) {
|
||||
}
|
||||
})
|
||||
}
|
||||
} catch (err) {
|
||||
// Note [Main error handling]
|
||||
console.error('Failed to setup IDE. Error:', err)
|
||||
Electron.app.quit()
|
||||
}
|
||||
}
|
||||
|
||||
// Note [Main error handling]
|
||||
// ==========================
|
||||
// It is critical that the main function runs in its entirety. Otherwise, IDE enters a "zombie
|
||||
// process" state, where Electron processes have been spawned, but there is no window and user can't
|
||||
// observe anything. Usually they will try to spawn another instance of the IDE, but this can fail
|
||||
// because of these zombie process presence.
|
||||
//
|
||||
// The solution is to catch all errors and exit the process if any part of the initial setup fails.
|
||||
// If it succeeds, at least the Window will be shown, allowing the user to observe the error and
|
||||
// close it.
|
||||
|
||||
function urlParamsFromObject(obj) {
|
||||
let params = []
|
||||
for (let key in obj) {
|
||||
|
Loading…
Reference in New Issue
Block a user