Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Avoid double-closing on fcntl failures (#2409)
Motivation: The fix provided in #2407 was subtly wrong. ignoreSIGPIPE, which throws the error in question, closes the FD on error _except_ on EINVAL from fcntl, where it instead does not. This inconsistent behaviour is the source of the bug. Because this behaviour is inconsistent, the fix from PR #2407 is also inconsistent and can in some cases double-close the socket. The actual issue is not as old as I expected: the code can be observed by reviewing the change in #1598, which incorrectly inserted the error transformation before the call to close. Modifications: - Revert the change from #2407. - Move the close in ignoreSIGPIPE to before the error check, rather than after, so we unconditionally execute it. Result: More resilient fix.
- Loading branch information