From b24d2670bd5bbd70dabddc489e96cf0ba1f9e8ba Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Tue, 26 Oct 2021 22:05:01 +0200 Subject: 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. --- crates/runner/src/lib.rs | 29 +++++++++-------------------- 1 file 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 -- cgit v1.2.3