Skip to content

Commit 3ddfaf0

Browse files
committed
workshop/Workplace: move code to PrepareChildProcess()
1 parent 1a7444d commit 3ddfaf0

File tree

1 file changed

+36
-32
lines changed

1 file changed

+36
-32
lines changed

src/workshop/Workplace.cxx

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,39 @@ WorkshopWorkplace::GetFullPlanNames() const noexcept
8686
return Pg::EncodeArray(list);
8787
}
8888

89+
static void
90+
PrepareChildProcess(PreparedChildProcess &p, const char *plan_name,
91+
const Plan &plan,
92+
FileDescriptor stderr_fd, SocketDescriptor control_fd)
93+
{
94+
p.hook_info = plan_name;
95+
p.stderr_fd = p.stdout_fd = stderr_fd;
96+
p.control_fd = control_fd.ToFileDescriptor();
97+
98+
if (!debug_mode) {
99+
p.uid_gid.effective_uid = plan.uid;
100+
p.uid_gid.effective_gid = plan.gid;
101+
102+
std::copy(plan.groups.begin(), plan.groups.end(),
103+
p.uid_gid.supplementary_groups.begin());
104+
}
105+
106+
if (!plan.chroot.empty())
107+
p.chroot = plan.chroot.c_str();
108+
109+
p.umask = plan.umask;
110+
p.rlimits = plan.rlimits;
111+
p.priority = plan.priority;
112+
p.sched_idle = plan.sched_idle;
113+
p.ioprio_idle = plan.ioprio_idle;
114+
p.ns.enable_network = plan.private_network;
115+
116+
if (plan.private_tmp)
117+
p.ns.mount.mount_tmp_tmpfs = "";
118+
119+
p.no_new_privs = true;
120+
}
121+
89122
void
90123
WorkshopWorkplace::Start(EventLoop &event_loop, const WorkshopJob &job,
91124
std::shared_ptr<Plan> plan,
@@ -122,34 +155,8 @@ WorkshopWorkplace::Start(EventLoop &event_loop, const WorkshopJob &job,
122155
enable_journal);
123156

124157
PreparedChildProcess p;
125-
p.hook_info = job.plan_name.c_str();
126-
p.stderr_fd = stderr_w;
127-
128-
if (control_child.IsDefined())
129-
p.control_fd = control_child.ToFileDescriptor();
130-
131-
if (!debug_mode) {
132-
p.uid_gid.effective_uid = plan->uid;
133-
p.uid_gid.effective_gid = plan->gid;
134-
135-
std::copy(plan->groups.begin(), plan->groups.end(),
136-
p.uid_gid.supplementary_groups.begin());
137-
}
138-
139-
if (!plan->chroot.empty())
140-
p.chroot = plan->chroot.c_str();
141-
142-
p.umask = plan->umask;
143-
p.rlimits = plan->rlimits;
144-
p.priority = plan->priority;
145-
p.sched_idle = plan->sched_idle;
146-
p.ioprio_idle = plan->ioprio_idle;
147-
p.ns.enable_network = plan->private_network;
148-
149-
if (plan->private_tmp)
150-
p.ns.mount.mount_tmp_tmpfs = "";
151-
152-
p.no_new_privs = true;
158+
PrepareChildProcess(p, job.plan_name.c_str(), *plan,
159+
stderr_w, control_child);
153160

154161
/* use a per-plan cgroup */
155162

@@ -172,10 +179,7 @@ WorkshopWorkplace::Start(EventLoop &event_loop, const WorkshopJob &job,
172179

173180
UniqueFileDescriptor stdout_w;
174181

175-
if (plan->control_channel) {
176-
/* copy stdout to stderr into the "log" column */
177-
p.stdout_fd = p.stderr_fd;
178-
} else {
182+
if (!plan->control_channel) {
179183
/* if there is no control channel, read progress from the
180184
stdout pipe */
181185
UniqueFileDescriptor stdout_r;

0 commit comments

Comments
 (0)