chiark / gitweb /
multicore: in master, when collecting results, pay no attention to bus and look only...
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 9 Mar 2014 03:22:37 +0000 (03:22 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 9 Mar 2014 03:22:37 +0000 (03:22 +0000)
main.c

diff --git a/main.c b/main.c
index 2cf994091fb2ceb26334ca971d925ad26ec7959e..d2900152f1336eaace2a8b656024f9f48dde100e 100644 (file)
--- a/main.c
+++ b/main.c
@@ -159,6 +159,7 @@ typedef struct {
   pid_t pid;
 } Worker;
 static Worker *mc_us;
+static bool mc_am_generator;
 
 static void multicore_check_for_new_best(void);
 
@@ -294,6 +295,7 @@ static void multicore(void) {
 
   genpid = fork();  assert(genpid >= 0);
   if (!genpid) {
+    mc_am_generator = 1;
     LPRINTF("generator running");
     iterate();
     exit(0);
@@ -306,16 +308,18 @@ static void multicore(void) {
 
   for (w=0; w<ncpus; w++) {
     mc_rwvsetup_full();
-    LPRINTF("reading report from %2d",w);
+    LPRINTF("reading report from %2d\n",w);
     ssize_t sr = preadv(fileno(mc_workers[w].results), mc_iov, mc_niovs, 0);
     if (!sr) continue;
+    LPRINTF("got report from %2d\n",w);
     maxhamweight = 0;
     optimise(1);
   }
 }
 
 static void multicore_check_for_new_best(void) {
-  if (!ncpus) return;
+  if (!(mc_us || mc_am_generator))
+    return;
 
   for (;;) {
     double msg;
@@ -329,7 +333,8 @@ static void multicore_check_for_new_best(void) {
 }
 
 static void multicore_found_new_best(void) {
-  if (!ncpus) return;
+  if (!mc_us)
+    return;
 
   if (mc_us /* might be master */) fprintf(stderr,"    w%-2d ",mc_us->w);
   ssize_t wrote = write(mc_bus, &best, sizeof(best));