async_pipe: Refactor opened/closed state handling, avoid assign(-1)#190
Closed
dkl wants to merge 2 commits intoboostorg:developfrom
Closed
async_pipe: Refactor opened/closed state handling, avoid assign(-1)#190dkl wants to merge 2 commits intoboostorg:developfrom
dkl wants to merge 2 commits intoboostorg:developfrom
Conversation
The async_pipe move_pipe unit test failed (here on Linux): fatal error: in "async/move_pipe": Throw location unknown (consider using BOOST_THROW_EXCEPTION) Dynamic exception type: boost::wrapexcept<boost::system::system_error> std::exception::what: assign: Bad file descriptor This was caused by the stream_descriptor.assign(-1) calls in the async_pipe move constructor. strace shows that it's trying to call epoll_ctl(EPOLL_CTL_ADD) for the -1 fd, which fails with EBADF. I don't know whether maybe this used to work with older asio versions, or on different systems, but either way, checking the opened/closed state instead of manually setting/checking for -1 seems like a good solution. This patch also fixes some potential fd leaks from some open() and dup() calls in case of exceptions.
The previous patch "async_pipe: Refactor opened/closed state handling, avoid assign(-1)" changed the assignment operator overloads to potentially leave the object partially modified when throwing an exception. This was a regression, so fix it by only modifying the object if there are no errors.
klemens-morgenstern
added a commit
that referenced
this pull request
May 18, 2022
klemens-morgenstern
added a commit
that referenced
this pull request
May 19, 2022
Squash after invalid branch & merge conflict. * Fixed file_descriptor move assignment operator to return a reference to 'this'. Issue # 219 * Returning *this instead of erroneous *this. Issue # 219 * Removed unneeded WNOHANG. * Closes #190 * Closes #121 * Attempting to fix wchar_t build error on circle. * Closes #197. * Changed child(pid_t) signature. * Multiple fixes. * Closes #189. * Closes #191. * Added missing work guard on windows. * Trying to catch windows early complete. * Increased log level on windows. * Multiple windows test fixes * Removed overly constraint tests. * fix missing headers * Closes klemens-morgenstern/boost-process#218 * Update executor.hpp explicit cast to int to silence this: `error: non-constant-expression cannot be narrowed from type 'unsigned long' to 'int' in initializer list [-Wc++11-narrowing]` * Fix posix implementation of move constructor/assignment in file_descriptor * Adjust docs `@boost` relative paths * Fixed UB for large environment names. * Closes #207. * Drone setup * Added include for filesystem::fstream. * Disabled useless tests. * Fixed environment length checks. * Pipe test & warning fixes. * Disabled warnings & added windows include fix. * More test fixes. * Removed some tests from apple build. * Removed some tests from apple build. * Disabled OSX tests via build script & fixed windows examples. * TSA fix attempt. Co-authored-by: James Baker <[email protected]> Co-authored-by: silent <[email protected]> Co-authored-by: ikrijan <[email protected]> Co-authored-by: Shauren <[email protected]> Co-authored-by: alandefreitas <[email protected]>
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 async_pipe move_pipe unit test failed (here on Linux):
This was caused by the
stream_descriptor.assign(-1)calls in the async_pipe move constructor. strace shows that it's trying to call epoll_ctl(EPOLL_CTL_ADD) for the -1 fd, which fails with EBADF.I don't know whether maybe this used to work with older asio versions, or on different systems, but either way, checking the opened/closed state instead of manually setting/checking for -1 seems like a good solution.
This patch also fixes some potential fd leaks from some open() and dup() calls in case of exceptions.