aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2024-06-24 00:06:25 +0800
committercrupest <crupest@outlook.com>2024-07-21 22:33:50 +0800
commit1e8bb0de0b0b05dc1323520dfa57df1f19b51b83 (patch)
tree225bfbf13ecf1a97e2573c174ee867f7301186be /include
parent5f0d7dc36a7a0091bfc152be9f06730cd08eb4dd (diff)
downloadcru-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')
-rw-r--r--include/cru/common/SubProcess.h10
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);