diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-26 22:05:01 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-26 23:40:47 +0200 |
commit | b24d2670bd5bbd70dabddc489e96cf0ba1f9e8ba (patch) | |
tree | fca532ff22f2873217cd1d99bbb09d0bb4afeedf /crates | |
parent | c97871cdc864787d6ebf3e515f85a36ea994c16e (diff) | |
download | rebel-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.rs | 29 |
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 |