Don’t call release with an exit code#6981
Merged
arcanis merged 2 commits intoyarnpkg:masterfrom Feb 2, 2019
Merged
Conversation
The `release` signature is incorrect, because its first argument is a callback function that will be called when the release is done. By attaching it to the `run()` promise however, release will be called with the exit code as argument. When the exit code is `1`, the code will crash.
This is very rare, but we’re seeing this when calling yarn from another node process (and possibly killing it too soon):
```
<redacted>/node_modules/yarn/lib/cli.js:78119
callback();
^
TypeError: callback is not a function
at options.fs.rmdir (<redacted>/node_modules/yarn/lib/cli.js:78119:9)
at FSReqWrap.oncomplete (fs.js:141:20)
```
Contributor
|
|
Member
|
Good catch! In fact, looking at the code I think we even call .then(() => new Promise(resolve => release(resolve))).then(resolve)Care to update the PR? |
Note that this slightly violates the type of runEventuallyWithFile, as the Promised resolved by the release callback might return an Error object. But since this error was also not handled before, it’s out of scope for the fix of this patch.
Contributor
Author
|
@arcanis Done. I think it can be slightly simpler than the version in your comment. I’ve also tested that this works in our use case and that the release callback is indeed called. |
Member
|
Lgtm, thanks for your contribution! 👍 |
cacheflow
added a commit
to cacheflow/yarn
that referenced
this pull request
Feb 14, 2019
* master: (67 commits) Include key info for "expected hoisted" invariant (yarnpkg#7009) refactor: remove unnecessary checks (yarnpkg#6955) fix: drive letter casing for win32 pnp (yarnpkg#7007) Don’t call `release` with an exit code (yarnpkg#6981) Check os and platform even when engines is not present in package.json (yarnpkg#6976) Fix handling of non-offline errors (yarnpkg#6968) Treat the ignore-scripts in yarnrc as a synonym to the cli arg (yarnpkg#6983) fix(pnp): make sure pnp module is again the first preloaded module. (yarnpkg#6951) refactor: remove unused imports (yarnpkg#6956) Add 1.14.0 to changelog (yarnpkg#6967) 1.15.0-0 v1.14.0 Fix suggested command after unlinking a package (yarnpkg#6931) Update CHANGELOG.md fix(pnp): make sure pnp module is the first preloaded module. (yarnpkg#6942) fix(pnp): make sure that the package locator is fetched with a trailing slash (yarnpkg#6882) Improve rendering of Chocolatey package description (yarnpkg#6899) Fixing dynamic require missing from webpack (yarnpkg#6908) feat(policies): Use github access token when requesting releases (yarnpkg#6912) Fixes PnP detection across workspaces (yarnpkg#6878) ...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
The
releasesignature is incorrect, because its first argument is a callback function that will be called when the release is done. By attaching it to therun()promise however, release will be called with the exit code as argument. When the exit code is1, the code will crash.This is very rare, but we’re seeing this when calling yarn from another node process (and possibly killing it too soon):