From 1e8bb0de0b0b05dc1323520dfa57df1f19b51b83 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 24 Jun 2024 00:06:25 +0800 Subject: fix: a lock bug and add test for Wait. NEED TEST: BufferStream, AutoReadStream, SubProcess. --- include/cru/common/SubProcess.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/cru/common/SubProcess.h b/include/cru/common/SubProcess.h index 078d5546..98c272a3 100644 --- a/include/cru/common/SubProcess.h +++ b/include/cru/common/SubProcess.h @@ -65,6 +65,10 @@ struct SubProcessExitResult { int exit_signal; bool has_core_dump; + bool IsSuccess() const { + return exit_type == SubProcessExitType::Normal && exit_code == 0; + } + static SubProcessExitResult Unknown() { return {SubProcessExitType::Unknown, 0, 0, false}; } @@ -139,7 +143,6 @@ class PlatformSubProcess : public Object { : start_info(std::move(start_info)), impl(std::move(impl)) {} std::mutex mutex; - std::unique_lock lock{mutex, std::defer_lock}; std::condition_variable condition_variable; SubProcessStartInfo start_info; SubProcessExitResult exit_result; @@ -205,6 +208,7 @@ class PlatformSubProcess : public Object { private: std::shared_ptr state_; + std::unique_lock lock_; }; class CRU_BASE_API SubProcess : public Object { @@ -215,6 +219,10 @@ class CRU_BASE_API SubProcess : public Object { String program, std::vector arguments = {}, std::unordered_map environments = {}); + static SubProcessExitResult Call( + String program, std::vector arguments = {}, + std::unordered_map environments = {}); + public: SubProcess(SubProcessStartInfo start_info); -- cgit v1.2.3