diff options
Diffstat (limited to 'Source/cmUVProcessChain.cxx')
-rw-r--r-- | Source/cmUVProcessChain.cxx | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/Source/cmUVProcessChain.cxx b/Source/cmUVProcessChain.cxx index 655e52a..4c72261 100644 --- a/Source/cmUVProcessChain.cxx +++ b/Source/cmUVProcessChain.cxx @@ -38,7 +38,8 @@ struct cmUVProcessChain::InternalData bool Valid = false; - cm::uv_loop_ptr Loop; + cm::uv_loop_ptr BuiltinLoop; + uv_loop_t* Loop; StreamData InputStreamData; StreamData OutputStreamData; @@ -74,6 +75,19 @@ cmUVProcessChainBuilder& cmUVProcessChainBuilder::AddCommand( return *this; } +cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetBuiltinLoop() +{ + this->Loop = nullptr; + return *this; +} + +cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetExternalLoop( + uv_loop_t& loop) +{ + this->Loop = &loop; + return *this; +} + cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetNoStream(Stream stdio) { switch (stdio) { @@ -135,6 +149,11 @@ cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetWorkingDirectory( return *this; } +uv_loop_t* cmUVProcessChainBuilder::GetLoop() const +{ + return this->Loop; +} + cmUVProcessChain cmUVProcessChainBuilder::Start() const { cmUVProcessChain chain; @@ -158,6 +177,13 @@ bool cmUVProcessChain::InternalData::Prepare( { this->Builder = builder; + if (this->Builder->Loop) { + this->Loop = this->Builder->Loop; + } else { + this->BuiltinLoop.init(); + this->Loop = this->BuiltinLoop; + } + auto const& input = this->Builder->Stdio[cmUVProcessChainBuilder::Stream_INPUT]; auto& inputData = this->InputStreamData; @@ -353,7 +379,6 @@ void cmUVProcessChain::InternalData::Finish() cmUVProcessChain::cmUVProcessChain() : Data(cm::make_unique<InternalData>()) { - this->Data->Loop.init(); } cmUVProcessChain::cmUVProcessChain(cmUVProcessChain&& other) noexcept |