Skip to content

Conversation

@dkl
Copy link
Contributor

@dkl dkl commented Dec 8, 2020

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.

dkl and others added 2 commits December 8, 2020 22:39
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]>
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.

1 participant