-// spawn a thread that terminates the program after a certain time given by
-// the environment variable WALLTIME (times a factor to account for the fact
-// that we run on multicore systems where things may take longer). this makes
+// spawn a thread that terminates the program after a certain time
+// given by the environment variable WALLTIME (times a factor to
+// account for the fact that we run on multicore systems where things
+// may take longer -- let's take 4*n_cpus as a factor). this makes
// sure we don't let jobs that deadlock on some mutex hang around
-// forever. note that this is orthogonal to using "ulimit" in Makefile.rules,
-// which only affects CPU time and consequently works on infinite loops but
-// not deadlocks
+// forever. note that this is orthogonal to using "ulimit" in
+// Makefile.rules, which only affects CPU time and consequently works
+// on infinite loops but not deadlocks
+//
+// the actual sleep time isn't all that important. the point is that
+// we need to kill deadlocked threads at one point, whenever that is
#ifdef DEAL_II_USE_MT
struct DeadlockKiller
conv >> delay;
if (conv)
{
- sleep (delay*multithread_info.n_cpus);
+ sleep (delay*multithread_info.n_cpus*4);
std::cerr << "Time's up: Killing job because it overran its allowed walltime"
<< std::endl;
std::abort ();