Index: /trunk/FACT++/src/EventBuilder.c
===================================================================
--- /trunk/FACT++/src/EventBuilder.c	(revision 15342)
+++ /trunk/FACT++/src/EventBuilder.c	(revision 15343)
@@ -2325,5 +2325,52 @@
    return -1;
 
-} /*-----------------------------------------------------------------*/
+}
+
+void checkAndCloseRun(int j, int irun, int cond, char *where)
+{
+    if (!cond &&
+        runCtrl[j].closeTime >= g_actTime &&
+        runCtrl[j].lastTime >= g_actTime - 300 &&
+        runCtrl[j].maxEvt >= runCtrl[j].actEvt)
+        return;
+
+    //close run for whatever reason
+    if (runCtrl[j].runId == gi_myRun)
+        gi_myRun = g_actTime;
+
+    int ii = 0;
+    if (cond)
+        ii = 1;
+    if (runCtrl[j].closeTime < g_actTime)
+        ii |= 2; // = 2;
+    if (runCtrl[j].lastTime < g_actTime - 300)
+        ii |= 4; // = 3;
+    if (runCtrl[j].maxEvt <= runCtrl[j].actEvt)
+        ii |= 8; // = 4;
+
+    if (runCtrl[j].procId == 0)
+    {
+        runFinish1(runCtrl[j].runId);
+        runCtrl[j].procId = 92;
+    }
+
+    runCtrl[j].closeTime = g_actTime - 1;
+
+    const int rc = runClose(runCtrl[j].fileHd, &runTail[j], sizeof(runTail[j]));
+    if (rc<0)
+    {
+        factPrintf(kError, 503, "writeEvt-%s: Error closing run %d (runClose[1],rc=%d)",
+                   where, runCtrl[j].runId, rc);
+        runCtrl[j].fileId = 92;
+    }
+    else
+    {
+        factPrintf(kInfo, 503, "writeEvt-%s: Closed run %d (ii=%d)",
+                   where, irun, ii);
+        runCtrl[j].fileId = 93;
+    }
+}
+
+/*-----------------------------------------------------------------*/
 
 
@@ -2437,7 +2484,7 @@
 // snprintf (str, MXSTR,"write event %d size %d",ievt,sizeof (mBuffer[id]));
 // factOut (kInfo, 504, str);
-                  int i = runWrite (runCtrl[j].fileHd, mBuffer[id].fEvent,
+                  const int rc = runWrite (runCtrl[j].fileHd, mBuffer[id].fEvent,
                                 sizeof (mBuffer[id]));
-                  if (i >= 0) {
+                  if (rc >= 0) {
                      runCtrl[j].lastTime = g_actTime;
                      runCtrl[j].actEvt++;
@@ -2453,40 +2500,5 @@
                   }
 
-                  if (i < 0
-                      || runCtrl[j].lastTime < g_actTime - 300
-                      || runCtrl[j].closeTime < g_actTime
-                      || runCtrl[j].maxEvt < runCtrl[j].actEvt) {
-                     int ii = 0;
-                     if (i < 0)
-                        ii = 1;
-                     /*else*/ if (runCtrl[j].closeTime < g_actTime)
-                        ii |= 2; // = 2;
-                     /*else*/ if (runCtrl[j].lastTime < g_actTime - 300)
-                        ii |= 4; // = 3;
-                     /*else*/ if (runCtrl[j].maxEvt <= runCtrl[j].actEvt)
-                        ii |= 8; // = 4;
-
-
-
-                     //close run for whatever reason
-                     if (runCtrl[j].runId == gi_myRun)
-                        gi_myRun = g_actTime;
-
-                     if (runCtrl[j].procId == 0) {
-                        runFinish1 (runCtrl[j].runId);
-                        runCtrl[j].procId = 92;
-                     }
-
-                     runCtrl[j].closeTime = g_actTime - 1;
-                     i = runClose (runCtrl[j].fileHd, &runTail[j],
-                                   sizeof (runTail[j]));
-                     if (i < 0) {
-                         factPrintf(kError, 503, "writeEvt: Error closing run %d (runClose[1],i=%d)", runCtrl[j].runId, i);
-                        runCtrl[j].fileId = 92;
-                     } else {
-                         factPrintf(kInfo, 503, "writeEvt: Closed run %d (ii[1]=%d)", irun, ii);
-                        runCtrl[j].fileId = 93;
-                     }
-                  }
+                  checkAndCloseRun(j, irun, rc<0, "1");
                }
             }
@@ -2535,38 +2547,12 @@
           }
       }
-      for (j = 0; j < MAX_RUN; j++) {
-         if (runCtrl[j].fileId == 0
-             && (runCtrl[j].closeTime < g_actTime
-                 || runCtrl[j].lastTime < g_actTime - 300
-                 || runCtrl[j].maxEvt <= runCtrl[j].actEvt
-                 || (runCtrl[j].lastTime < lastStartedTime && runCtrl[j].runId != 0))) //ETIENNE added the condition at this line. dunno what to do with run 0: skipping it
-{
-            if (runCtrl[j].runId == gi_myRun)
-                gi_myRun = g_actTime;
-
-            int ii = 0;
-            if (runCtrl[j].closeTime < g_actTime)
-               ii |= 2;  // = 2
-            /*else*/ if (runCtrl[j].lastTime < g_actTime - 300)
-               ii |= 4;  // = 3
-            /*else*/ if (runCtrl[j].maxEvt <= runCtrl[j].actEvt)
-               ii |= 8;  // = 4
-
-            if (runCtrl[j].procId == 0) {
-               runFinish1 (runCtrl[j].runId);
-               runCtrl[j].procId = 92;
-            }
-
-            runCtrl[j].closeTime = g_actTime - 1;
-            int i = runClose (runCtrl[j].fileHd, &runTail[j],
-                          sizeof (runTail[j]));
-            if (i < 0) {
-                factPrintf(kError, 506, "writeEvt: Error closing run %d (runClose[2],i=%d)", runCtrl[j].runId, i);
-               runCtrl[j].fileId = 94;
-            } else {
-                factPrintf(kInfo, 507, "writeEvt: Closed run %d (ii[2]=%d)", runCtrl[j].runId, ii);
-               runCtrl[j].fileId = 95;
-            }
-         }
+      for (j = 0; j < MAX_RUN; j++)
+      {
+          if (runCtrl[j].fileId == 0)
+          {
+              //ETIENNE added the condition at this line. dunno what to do with run 0: skipping it
+              const int cond = runCtrl[j].lastTime < lastStartedTime && runCtrl[j].runId != 0;
+              checkAndCloseRun(j, runCtrl[j].runId, cond, "2");
+          }
       }
 
