diff options
author | crupest <crupest@outlook.com> | 2024-06-24 00:06:25 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2024-07-16 22:01:11 +0800 |
commit | 937e64e8a115a0d6d7e6e2c466b03945b71114bc (patch) | |
tree | 7e54a959b892e3adfb44573d91e19dcb9d532105 | |
parent | 807c1dfe8a897f9c61bf3549ff2566917b53023b (diff) | |
download | cru-937e64e8a115a0d6d7e6e2c466b03945b71114bc.tar.gz cru-937e64e8a115a0d6d7e6e2c466b03945b71114bc.tar.bz2 cru-937e64e8a115a0d6d7e6e2c466b03945b71114bc.zip |
fix: fix PosixSpawnSubProcessi bug.
NEED TEST: BufferStream, AutoReadStream, SubProcess.
-rw-r--r-- | include/cru/common/SubProcess.h | 8 | ||||
-rw-r--r-- | include/cru/common/io/AutoReadStream.h | 1 | ||||
-rw-r--r-- | src/common/platform/unix/PosixSpawnSubProcess.cpp | 2 |
3 files changed, 5 insertions, 6 deletions
diff --git a/include/cru/common/SubProcess.h b/include/cru/common/SubProcess.h index 1f7193b5..86dd3ebe 100644 --- a/include/cru/common/SubProcess.h +++ b/include/cru/common/SubProcess.h @@ -188,9 +188,9 @@ class PlatformSubProcessBase : public Object { bool delete_self_; std::thread process_thread_; - std::mutex process_mutex_; - std::unique_lock<std::mutex> process_lock_; - std::condition_variable process_condition_variable_; + std::recursive_mutex process_mutex_; + std::unique_lock<std::recursive_mutex> process_lock_; + std::condition_variable_any process_condition_variable_; }; class CRU_BASE_API SubProcess : public Object { @@ -212,7 +212,7 @@ class CRU_BASE_API SubProcess : public Object { ~SubProcess(); public: - void Wait(std::optional<std::chrono::milliseconds> wait_time); + void Wait(std::optional<std::chrono::milliseconds> wait_time = std::nullopt); void Kill(); SubProcessStatus GetStatus(); diff --git a/include/cru/common/io/AutoReadStream.h b/include/cru/common/io/AutoReadStream.h index 2887b319..b416d050 100644 --- a/include/cru/common/io/AutoReadStream.h +++ b/include/cru/common/io/AutoReadStream.h @@ -5,7 +5,6 @@ #include "Stream.h" #include <mutex> -#include <thread> namespace cru::io { struct AutoReadStreamOptions { diff --git a/src/common/platform/unix/PosixSpawnSubProcess.cpp b/src/common/platform/unix/PosixSpawnSubProcess.cpp index 1d69f54a..4065d6f6 100644 --- a/src/common/platform/unix/PosixSpawnSubProcess.cpp +++ b/src/common/platform/unix/PosixSpawnSubProcess.cpp @@ -31,7 +31,7 @@ PosixSpawnSubProcess::PosixSpawnSubProcess(SubProcessStartInfo start_info) stdout_buffer_stream_ = std::make_unique<io::AutoReadStream>(stdout_stream_.get(), false); stderr_buffer_stream_ = - std::make_unique<io::AutoReadStream>(stdout_stream_.get(), false); + std::make_unique<io::AutoReadStream>(stderr_stream_.get(), false); } PosixSpawnSubProcess::~PosixSpawnSubProcess() {} |