Skip to content

Cleanup event handlers before return. #8

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

Merged
merged 3 commits into from
Nov 3, 2017

Conversation

walac
Copy link
Contributor

@walac walac commented Nov 2, 2017

After the promisePipe returns, it leaves some events handlers installed
in the streams. If the user later wants to reuse the streams, the
handlers will be called out of proper contexts, which can lead to bad
code behavior for no clear sane reason.

We fix this by uninstalling all event handlers before the function
returns or when an error happens.

Notice that any prior event handler the user installed for the relevant
events will be lost after the function returns. Fixing this would
require a somewhat bigger code change, which seems not worth
to cover such corner case.

@walac walac force-pushed the cleanup-listeners branch 2 times, most recently from 7e1982c to f321c57 Compare November 2, 2017 16:19
@walac
Copy link
Contributor Author

walac commented Nov 2, 2017

Tests are failing but it feels like it is because one of the tests run against node 4, which seems not supported anymore.

Wander Lairson Costa added 2 commits November 2, 2017 14:22
Node 4 is old and it seems the project doesn't care about it anymore.
Update transform is designed to fail when a specific string is passed.
It tests for that case and if the string matches, it calls the callback
with an appropriate error object but, instead of returning, it keeps
goin and calls the callback again, raising a 'write callback called
multiple times' error.

Add a return statement after calling the callback with error object
to avoid disruptive behavior.
@walac walac force-pushed the cleanup-listeners branch from f321c57 to c2d7585 Compare November 2, 2017 16:23
@walac
Copy link
Contributor Author

walac commented Nov 2, 2017

Pushed a commit to remove node 4.

@walac walac force-pushed the cleanup-listeners branch 2 times, most recently from 90c1395 to a147822 Compare November 3, 2017 06:40
After the promisePipe returns, it leaves some event handlers installed
in the streams. If the user later wants to reuse the streams, the
handlers will be called out of proper contexts, which can lead to bad
code behavior for no clear sane reason.

We fix this by uninstalling all event handlers before the function
returns or when an error happens.

Notice that any prior event handler the user installed for the relevant
events will be lost after the function returns. Fixing this would
require a somewhat bigger code change, which seems not worth to cover
such corner case.
@walac walac force-pushed the cleanup-listeners branch from a147822 to a410248 Compare November 3, 2017 06:44
@walac
Copy link
Contributor Author

walac commented Nov 3, 2017

A more careful reading of the stream API showed that contrary to common sense in other stream APIs, a stream in nodejs cannot be reused once it is piped. So, if this is right, this PR has no practical effect.

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.

2 participants