summaryrefslogtreecommitdiffstats
path: root/crates
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 /crates
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.
Diffstat (limited to 'crates')
-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