Index: runs.scm
==================================================================
--- runs.scm
+++ runs.scm
@@ -82,16 +82,27 @@
        (debug:print 2 *default-log-port* "setenv " key " " val)
        (safe-setenv key val)))
     (if (not (get-environment-variable "MT_TARGET"))(setenv "MT_TARGET" target))
     ;; we had a case where there was an exception generated by the hash-table-ref
     ;; due to *configdat* being #f Adding a handle and exit
-    (handle-exceptions
-	exn
-	(begin
-	  (debug:print 0 *default-log-port* "FATAL: *configdat* was inaccessible! This should never happen.")
-	  (exit 1))
-      (alist->env-vars (hash-table-ref/default *configdat* "env-override" '())))
+    (let fatal-loop ((count 0))
+      (handle-exceptions
+	  exn
+	  (let ((call-chain (get-call-chain))
+		(msg        ((condition-property-accessor 'exn 'message) exn)))
+	    (if (< count 5)
+		(begin ;; this call is colliding, do some crude stuff to fix it.
+		  (debug:print 0 *default-log-port* "ERROR: *configdat* was inaccessible! This should never happen. Retry #" count)
+		  (launch:setup force-reread: #t)
+		  (fatal-loop (+ count 1)))
+		(begin
+		  (debug:print 0 *default-log-port* "FATAL: *configdat* was inaccessible! This should never happen. Retried " count " times. Message: " msg)
+		  (debug:print 0 *default-log-port* "Call chain:")
+		  (with-output-to-port *default-log-port*
+		    (lambda ()(pp call-chain)))
+		  (exit 1))))
+	(alist->env-vars (hash-table-ref/default *configdat* "env-override" '()))))
     ;; Lets use this as an opportunity to put MT_RUNNAME in the environment
     (let ((runname  (if inrunname inrunname (rmt:get-run-name-from-id run-id))))
       (if runname
 	  (setenv "MT_RUNNAME" runname)
 	  (debug:print-error 0 *default-log-port* "no value for runname for id " run-id)))