diff options
author | crupest <crupest@outlook.com> | 2024-06-24 00:06:25 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2024-07-21 22:33:50 +0800 |
commit | 1e8bb0de0b0b05dc1323520dfa57df1f19b51b83 (patch) | |
tree | 225bfbf13ecf1a97e2573c174ee867f7301186be /include/cru | |
parent | 5f0d7dc36a7a0091bfc152be9f06730cd08eb4dd (diff) | |
download | cru-1e8bb0de0b0b05dc1323520dfa57df1f19b51b83.tar.gz cru-1e8bb0de0b0b05dc1323520dfa57df1f19b51b83.tar.bz2 cru-1e8bb0de0b0b05dc1323520dfa57df1f19b51b83.zip |
fix: a lock bug and add test for Wait.
NEED TEST: BufferStream, AutoReadStream, SubProcess.
Diffstat (limited to 'include/cru')
-rw-r--r-- | include/cru/common/SubProcess.h | 10 |
1 files changed, 9 insertions, 1 deletions
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<std::mutex> 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> state_; + std::unique_lock<std::mutex> lock_; }; class CRU_BASE_API SubProcess : public Object { @@ -215,6 +219,10 @@ class CRU_BASE_API SubProcess : public Object { String program, std::vector<String> arguments = {}, std::unordered_map<String, String> environments = {}); + static SubProcessExitResult Call( + String program, std::vector<String> arguments = {}, + std::unordered_map<String, String> environments = {}); + public: SubProcess(SubProcessStartInfo start_info); |