Index: trunk/ippTools/src/flatcorr.c
===================================================================
--- trunk/ippTools/src/flatcorr.c	(revision 15583)
+++ trunk/ippTools/src/flatcorr.c	(revision 15606)
@@ -36,4 +36,6 @@
 static bool pendingMode(pxConfig *config);
 static bool updateMode(pxConfig *config);
+
+static bool setflatcorrpRunState(pxConfig *config, psS64 corr_id, const char *state);
 
 # define MODECASE(caseName, func) \
@@ -263,4 +265,7 @@
             label
         )) {
+        if (!psDBRollback(config->dbh)) {
+            psError(PS_ERR_UNKNOWN, false, "database error");
+        }
         psError(PS_ERR_UNKNOWN, false, "database error");
         return false;
@@ -276,4 +281,7 @@
         psS64 exp_id = psMetadataLookupS64(&status, md, "exp_id");
         if (!status) {
+            if (!psDBRollback(config->dbh)) {
+                psError(PS_ERR_UNKNOWN, false, "database error");
+            }
             psError(PS_ERR_UNKNOWN, false, "failed to lookup value for exp_id");
             psFree(output);
@@ -298,4 +306,7 @@
                 chip_id
             )) {
+            if (!psDBRollback(config->dbh)) {
+                psError(PS_ERR_UNKNOWN, false, "database error");
+            }
             psError(PS_ERR_UNKNOWN, false, "database error");
             return false;
@@ -305,4 +316,13 @@
     psFree(output);
 
+    // set the flatcorrRun to a state of 'run'
+    if (!setflatcorrpRunState(config, corr_id, "run")) {
+        if (!psDBRollback(config->dbh)) {
+            psError(PS_ERR_UNKNOWN, false, "database error");
+        }
+        psError(PS_ERR_UNKNOWN, false, "failed to set run state");
+        return false;
+    }
+
     if (!psDBCommit(config->dbh)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
@@ -326,2 +346,28 @@
     return false;
 }
+
+
+static bool setflatcorrpRunState(pxConfig *config, psS64 corr_id, const char *state)
+{
+    PS_ASSERT_PTR_NON_NULL(state, false);
+
+    // check that state is a valid string value
+    if (!(
+            (strncmp(state, "run", 4) == 0)
+            || (strncmp(state, "stop", 5) == 0)
+            || (strncmp(state, "reg", 4) == 0)
+        )
+    ) {
+        psError(PS_ERR_UNKNOWN, false, "invalid state: %s", state);
+        return false;
+    }
+
+    char *query = "UPDATE flatcorrpRun SET state = '%s' WHERE corr_id = %" PRId64;
+    if (!p_psDBRunQuery(config->dbh, query, state, corr_id)) {
+        psError(PS_ERR_UNKNOWN, false,
+                "failed to change state for corr_id %" PRId64, corr_id);
+        return false;
+    }
+
+    return true;
+}
