Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don’t call release with an exit code #6981

Merged
merged 2 commits into from
Feb 2, 2019
Merged

Conversation

eelco
Copy link
Contributor

@eelco eelco commented Jan 29, 2019

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)

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)
```
@olingern
Copy link
Contributor

olingern commented Jan 30, 2019

related #6672

@arcanis
Copy link
Member

arcanis commented Jan 30, 2019

Good catch! In fact, looking at the code I think we even call resolve too soon, since release seems to be asynchronous. We should probably do something like this:

.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.
@eelco
Copy link
Contributor Author

eelco commented Feb 2, 2019

@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.

@arcanis
Copy link
Member

arcanis commented Feb 2, 2019

Lgtm, thanks for your contribution! 👍

@arcanis arcanis merged commit 19ec98c into yarnpkg:master Feb 2, 2019
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)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants