@@ -109,6 +109,25 @@ WorkshopOperator::InitLog(std::size_t max_log_buffer,
109109 return std::move (stderr_w);
110110}
111111
112+ inline UniqueSocketDescriptor
113+ WorkshopOperator::InitControl ()
114+ {
115+ assert (!control_channel);
116+
117+ if (!plan->control_channel )
118+ return {};
119+
120+ auto [control_parent, control_child] = CreateSocketPair (SOCK_SEQPACKET);
121+ control_parent.SetNonBlocking ();
122+
123+ WorkshopControlChannelHandler &handler = *this ;
124+ control_channel = std::make_unique<WorkshopControlChannelServer>(event_loop,
125+ std::move (control_parent),
126+ handler);
127+
128+ return std::move (control_child);
129+ }
130+
112131static void
113132PrepareChildProcess (PreparedChildProcess &p, const char *plan_name,
114133 const Plan &plan,
@@ -168,18 +187,7 @@ WorkshopOperator::Start2(std::size_t max_log_buffer,
168187
169188 /* create control socket */
170189
171- UniqueSocketDescriptor control_child;
172- if (plan->control_channel ) {
173- UniqueSocketDescriptor control_parent;
174- std::tie (control_parent, control_child) = CreateSocketPair (SOCK_SEQPACKET);
175-
176- control_parent.SetNonBlocking ();
177-
178- WorkshopControlChannelHandler &handler = *this ;
179- control_channel = std::make_unique<WorkshopControlChannelServer>(event_loop,
180- std::move (control_parent),
181- handler);
182- }
190+ const auto control_child = InitControl ();
183191
184192 PreparedChildProcess p;
185193 PrepareChildProcess (p, job.plan_name .c_str (), *plan,
0 commit comments