Prepare for killing the fsm: Inline FSM_DESTROY in fsmTeardown()
authorFlorian Festi <ffesti@redhat.com>
Tue, 27 Mar 2012 15:52:13 +0000 (17:52 +0200)
committerFlorian Festi <ffesti@redhat.com>
Fri, 30 Mar 2012 13:00:40 +0000 (15:00 +0200)
lib/fsm.c

index 833718c..c52e09d 100644 (file)
--- a/lib/fsm.c
+++ b/lib/fsm.c
@@ -678,8 +678,34 @@ static int fsmTeardown(FSM_t fsm)
 {
     int rc = fsm->rc;
 
-    if (!rc)
-       rc = fsmUNSAFE(fsm, FSM_DESTROY);
+
+    if (!rc) {
+        /* Check for hard links missing from payload. */
+        while ((fsm->li = fsm->links) != NULL) {
+            fsm->links = fsm->li->next;
+            fsm->li->next = NULL;
+            if (fsm->goal == FSM_PKGINSTALL && fsm->li->linksLeft) {
+                for (nlink_t i = 0 ; i < fsm->li->linksLeft; i++) {
+                    if (fsm->li->filex[i] < 0)
+                        continue;
+                    rc = CPIOERR_MISSING_HARDLINK;
+                    if (fsm->failedFile && *fsm->failedFile == NULL) {
+                        fsm->ix = fsm->li->filex[i];
+                        if (!fsmMapPath(fsm)) {
+                            /* Out-of-sync hardlinks handled as sub-state */
+                            *fsm->failedFile = fsm->path;
+                            fsm->path = NULL;
+                        }
+                    }
+                    break;
+                }
+            }
+            fsm->li = freeHardLink(fsm->li);
+        }
+    }
+
+    fsm->buf = _free(fsm->buf);
+    fsm->bufsize = 0;
 
     rc = rpmcpioClose(fsm->archive) || rc;
 
@@ -2018,34 +2044,6 @@ static int fsmStage(FSM_t fsm, fileStage stage)
            fsm->path = NULL;
        }
        break;
-    case FSM_DESTROY:
-       fsm->path = _free(fsm->path);
-
-       /* Check for hard links missing from payload. */
-       while ((fsm->li = fsm->links) != NULL) {
-           fsm->links = fsm->li->next;
-           fsm->li->next = NULL;
-           if (fsm->goal == FSM_PKGINSTALL && fsm->li->linksLeft) {
-               for (nlink_t i = 0 ; i < fsm->li->linksLeft; i++) {
-                   if (fsm->li->filex[i] < 0)
-                       continue;
-                   rc = CPIOERR_MISSING_HARDLINK;
-                   if (fsm->failedFile && *fsm->failedFile == NULL) {
-                       fsm->ix = fsm->li->filex[i];
-                       if (!fsmMapPath(fsm)) {
-                           /* Out-of-sync hardlinks handled as sub-state */
-                           *fsm->failedFile = fsm->path;
-                           fsm->path = NULL;
-                       }
-                   }
-                   break;
-               }
-           }
-           fsm->li = freeHardLink(fsm->li);
-       }
-       fsm->buf = _free(fsm->buf);
-        fsm->bufsize = 0;
-       break;
     default:
        break;
     }