Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Synchronize threads before exit on armageddon.
authoragiersch <agiersch@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 23 Nov 2010 20:01:16 +0000 (20:01 +0000)
committeragiersch <agiersch@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 23 Nov 2010 20:01:16 +0000 (20:01 +0000)
This fixes a segfault when a runner thread tries to use the logging
facility after it has been shut down.

git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@8623 48e7efb5-ca39-0410-a469-dd3cf9ba447f

tools/tesh/run_context.c

index e809ebe..dc19f3f 100644 (file)
@@ -180,6 +180,13 @@ void rctx_armageddon(rctx_t initiator, int exitcode)
     rctx_armageddon_kill_one(initiator, filepos, job);
   }
 
     rctx_armageddon_kill_one(initiator, filepos, job);
   }
 
+  /* Give runner threads a chance to acknowledge the processes deaths */
+  usleep(10000);
+  /* Ensure that nobody is running rctx_wait on exit */
+  if (fg_job)
+    xbt_os_mutex_acquire(rctx->interruption);
+  xbt_dynar_foreach(bg_jobs, cursor, job)
+    xbt_os_mutex_acquire(job->interruption);
   VERB0("Shut everything down!");
   exit(exitcode);
 }
   VERB0("Shut everything down!");
   exit(exitcode);
 }