From 7ef468207ca880aed1534cad2eed04fec36d7fb3 Mon Sep 17 00:00:00 2001 From: joerg Date: Thu, 23 Jun 2016 15:07:39 +0000 Subject: pbulk-base-0.53: After processing the tree-scan job, reassign jobs to all idle clients. Before, this was only necessary at the very start of the build. --- pkgtools/pbulk/files/pbulk/pscan/master.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'pkgtools/pbulk') diff --git a/pkgtools/pbulk/files/pbulk/pscan/master.c b/pkgtools/pbulk/files/pbulk/pscan/master.c index 09bef0d3298..84e5197b5be 100644 --- a/pkgtools/pbulk/files/pbulk/pscan/master.c +++ b/pkgtools/pbulk/files/pbulk/pscan/master.c @@ -1,4 +1,4 @@ -/* $NetBSD: master.c,v 1.11 2015/12/07 16:52:40 joerg Exp $ */ +/* $NetBSD: master.c,v 1.12 2016/06/23 15:07:39 joerg Exp $ */ /*- * Copyright (c) 2007, 2009 Joerg Sonnenberger . @@ -68,6 +68,7 @@ struct scan_peer { }; static void assign_job(struct scan_peer *); +static void reassign_jobs(void); static void do_nothing(void *arg) @@ -106,6 +107,7 @@ finish_job(void *arg) LIST_REMOVE(peer, peer_link); process_job(peer->job, JOB_DONE); assign_job(peer); + reassign_jobs(); } static void @@ -201,6 +203,21 @@ assign_job(struct scan_peer *peer) kill_peer); } +static void +reassign_jobs(void) +{ + struct scan_peer *peer; + + while ((peer = LIST_FIRST(&inactive_peers)) != NULL) { + if (!has_job()) + break; + LIST_REMOVE(peer, peer_link); + assign_job(peer); + if (peer-> job == NULL) + break; + } +} + static void listen_handler(int sock, void *arg) { @@ -225,7 +242,6 @@ listen_handler(int sock, void *arg) static void child_handler(struct signal_event *ev) { - struct scan_peer *peer; int status; if (waitpid(child_pid, &status, WNOHANG) == -1) { @@ -238,13 +254,7 @@ child_handler(struct signal_event *ev) clients_started = 1; signal_del(ev); - - while ((peer = LIST_FIRST(&inactive_peers)) != NULL) { - LIST_REMOVE(peer, peer_link); - assign_job(peer); - if (peer-> job == NULL) - break; - } + reassign_jobs(); } void -- cgit v1.2.3