aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2024-06-24 00:06:25 +0800
committercrupest <crupest@outlook.com>2024-07-16 22:01:11 +0800
commit937e64e8a115a0d6d7e6e2c466b03945b71114bc (patch)
tree7e54a959b892e3adfb44573d91e19dcb9d532105
parent807c1dfe8a897f9c61bf3549ff2566917b53023b (diff)
downloadcru-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.h8
-rw-r--r--include/cru/common/io/AutoReadStream.h1
-rw-r--r--src/common/platform/unix/PosixSpawnSubProcess.cpp2
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() {}