Fix child processes killing function #510
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
If a process exits (either normally or due to an error) before the call to
process.kill('SIGINT')
inside functionkillTask
, then the signal cannot be delivered to the process, and the handler registered on 'exit' event for the process won't be executed, thus leaving the promise unresolved, and therefore the extension gets stuck.To solve this, check the value returned by
process.kill('SIGINT')
:true
, then the signal is delivered, and the 'exit' event handler should be executed;false
, then the signal cannot be delivered. Then, check theexitCode
of the process. If that is notnull
, then the process already exited, therefore there is nothing more to do than resolve the returned promise.Note that theoretically, in case the call to
process.kill('SIGINT')
returns false, then theexitCode
of the process should be necessarily not null.So, the conditional check for the value of
exitCode
should be quite redundant, but it allows to easily fix function's behavior in case the above assumption is false.This should fix issue #360 and related issues.