summaryrefslogtreecommitdiffstats
path: root/crates/runner/src/lib.rs
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2021-10-26 21:31:18 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2021-10-26 22:12:32 +0200
commit800383146af49b4adfd6ecb6d32c6eef4cb27763 (patch)
tree1cf35acea25d86d7a14a8a03625c5cdfc347e614 /crates/runner/src/lib.rs
parentae79ea1276f56872da590dd611c7b12b4db67c27 (diff)
downloadrebel-800383146af49b4adfd6ecb6d32c6eef4cb27763.tar
rebel-800383146af49b4adfd6ecb6d32c6eef4cb27763.zip
runner: pass jobserver to task handler as reference
Some code simplification.
Diffstat (limited to 'crates/runner/src/lib.rs')
-rw-r--r--crates/runner/src/lib.rs28
1 files changed, 13 insertions, 15 deletions
diff --git a/crates/runner/src/lib.rs b/crates/runner/src/lib.rs
index 8104daa..ae56981 100644
--- a/crates/runner/src/lib.rs
+++ b/crates/runner/src/lib.rs
@@ -46,11 +46,11 @@ fn handle_sigchld() {
}
fn handle_request(
- jobserver: Jobserver,
+ jobserver: &mut Jobserver,
socket: UnixSeqpacketConn,
request_socket: UnixStream,
-) -> (Jobserver, UnixSeqpacketConn) {
- let child = |(mut jobserver, socket): (Jobserver, UnixSeqpacketConn)| {
+) -> UnixSeqpacketConn {
+ let child = |socket| {
drop(socket);
let task: Task =
@@ -59,29 +59,30 @@ fn handle_request(
prctl::set_name(&task.label).expect("prctl(PR_SET_NAME)");
let token = jobserver.wait();
- let (pid, mut jobserver) = unsafe {
- clone::spawn(None, jobserver, |jobserver| {
+ let pid = unsafe {
+ clone::spawn(None, (), |()| {
let result = task::handle(task, jobserver);
bincode::serialize_into(&request_socket, &result)
.expect("Failed to send task result");
drop(request_socket);
})
}
- .expect("fork()");
+ .expect("fork()")
+ .0;
let wait_res = wait::waitpid(pid, None);
jobserver.post(token);
wait_res.expect("waitpid()");
};
- unsafe { clone::spawn(None, (jobserver, socket), child) }
+ unsafe { clone::spawn(None, socket, child) }
.expect("fork()")
.1
}
fn handle_socket(
- jobserver: Jobserver,
+ jobserver: &mut Jobserver,
socket: UnixSeqpacketConn,
-) -> Option<(Jobserver, UnixSeqpacketConn)> {
+) -> Option<UnixSeqpacketConn> {
let mut fd = 0;
match socket
@@ -139,13 +140,10 @@ fn runner(uid: Uid, gid: Gid, mut socket: UnixSeqpacketConn, _lockfile: File, op
.revents()
.expect("Unknown events in poll() return");
if events.contains(poll::PollFlags::POLLIN) {
- match handle_socket(jobserver, socket) {
- Some((jobserver_ret, socket_ret)) => {
- jobserver = jobserver_ret;
- socket = socket_ret;
- }
+ socket = match handle_socket(&mut jobserver, socket) {
+ Some(socket) => socket,
None => break,
- }
+ };
} else if events.intersects(!poll::PollFlags::POLLIN) {
panic!("Unexpected error status for socket file descriptor");
}