summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2021-10-26 22:05:01 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2021-10-26 23:40:47 +0200
commitb24d2670bd5bbd70dabddc489e96cf0ba1f9e8ba (patch)
treefca532ff22f2873217cd1d99bbb09d0bb4afeedf
parentc97871cdc864787d6ebf3e515f85a36ea994c16e (diff)
downloadrebel-b24d2670bd5bbd70dabddc489e96cf0ba1f9e8ba.tar
rebel-b24d2670bd5bbd70dabddc489e96cf0ba1f9e8ba.zip
runner: remove another layer of child processes
With the restructuring around the poll loop and moving the job token handling to the task process, this has become unnecessary as well.
-rw-r--r--crates/runner/src/lib.rs29
1 files changed, 9 insertions, 20 deletions
diff --git a/crates/runner/src/lib.rs b/crates/runner/src/lib.rs
index a300446..81e328e 100644
--- a/crates/runner/src/lib.rs
+++ b/crates/runner/src/lib.rs
@@ -61,31 +61,20 @@ fn handle_request(
socket: UnixSeqpacketConn,
request_socket: UnixStream,
) -> UnixSeqpacketConn {
- let child = |socket| {
- let pid = unsafe {
- clone::spawn(None, (), |()| {
- drop(socket);
+ let run = |socket| {
+ drop(socket);
- let task: Task = bincode::deserialize_from(&request_socket)
- .expect("Failed to decode task description");
+ let task: Task =
+ bincode::deserialize_from(&request_socket).expect("Failed to decode task description");
- prctl::set_name(&task.label).expect("prctl(PR_SET_NAME)");
+ prctl::set_name(&task.label).expect("prctl(PR_SET_NAME)");
- let result = task::handle(task, &mut ctx.jobserver);
- bincode::serialize_into(&request_socket, &result)
- .expect("Failed to send task result");
- drop(request_socket);
- })
- }
- .expect("fork()")
- .0;
- wait::waitpid(pid, None)
- .expect("waidpid()")
- .check()
- .unwrap();
+ let result = task::handle(task, &mut ctx.jobserver);
+ bincode::serialize_into(&request_socket, &result).expect("Failed to send task result");
+ drop(request_socket);
};
- let (pid, socket) = unsafe { clone::spawn(None, socket, child) }.expect("fork()");
+ let (pid, socket) = unsafe { clone::spawn(None, socket, run) }.expect("fork()");
assert!(ctx.tasks.insert(pid));
socket