Skip to content
This repository was archived by the owner on Jan 30, 2026. It is now read-only.

Cleanup event handlers before return. - #8

Merged
esamattis merged 3 commits into
esamattis:masterfrom
walac:cleanup-listeners
Nov 3, 2017
Merged

esamattis merged 3 commits into
esamattis:masterfrom
walac:cleanup-listeners

Conversation

@walac

@walac walac commented Nov 2, 2017

Copy link
Copy Markdown
Contributor

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

walac commented Nov 2, 2017

Copy link
Copy Markdown
Contributor Author

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

walac commented Nov 2, 2017

Copy link
Copy Markdown
Contributor Author

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

walac commented Nov 3, 2017

Copy link
Copy Markdown
Contributor Author

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 subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants