This patch fixes the one sent to bug-cfengine by Jo Rhett, which tried to index 
a enum type (you can't do that), and so it wasn't merged to trunk as it 
wouldn't compile.

Index: cfengine-trunk/src/do.c
===================================================================
--- cfengine-trunk.orig/src/do.c
+++ cfengine-trunk/src/do.c
@@ -2765,8 +2765,9 @@ for (ptr = VPKG; ptr != NULL; ptr=ptr->n
    Verbose("Match status for %s is %u\n", ptr->name, match );
 
    /* Process any queued actions (install/remove). */
-   if ((pending_pkgs) && ((ptr->action != prev_action) || (ptr->pkgmgr != 
prev_pkgmgr)))
+   if ((pending_pkgs != NULL) && ((ptr->action != prev_action) || (ptr->pkgmgr 
!= prev_pkgmgr)))
       {
+      Verbose("New action for package %s didn't match previous action\n", 
ptr->name);
       ProcessPendingPackages(prev_pkgmgr, prev_action, &pending_pkgs);
       DeleteItemList( pending_pkgs );
       }
@@ -2778,10 +2779,10 @@ for (ptr = VPKG; ptr != NULL; ptr=ptr->n
       if (ptr->action == pkgaction_remove) 
          {
          PackageList(ptr->name, ptr->pkgmgr, ptr->ver, ptr->cmp, 
&pending_pkgs);
-            AppendItem(&pending_pkgs, ptr->name, NULL);
+         AppendItem(&pending_pkgs, ptr->name, NULL);
 
          /* Some package managers operate best doing things one at a time. */
-            if ( (ptr->pkgmgr == pkgmgr_freebsd) || (ptr->pkgmgr == 
pkgmgr_sun) )
+         if ( (ptr->pkgmgr == pkgmgr_freebsd) || (ptr->pkgmgr == pkgmgr_sun) )
             {
             RemovePackage( ptr->pkgmgr, &pending_pkgs );
             DeleteItemList( pending_pkgs );
@@ -2797,10 +2798,10 @@ for (ptr = VPKG; ptr != NULL; ptr=ptr->n
       AddMultipleClasses(ptr->elsedef);
       if (ptr->action == pkgaction_install)
          {
-            AppendItem(&pending_pkgs, ptr->name, NULL);
+         AppendItem(&pending_pkgs, ptr->name, NULL);
 
          /* Some package managers operate best doing things one at a time. */
-            if ( (ptr->pkgmgr == pkgmgr_freebsd) || (ptr->pkgmgr == 
pkgmgr_sun) )
+         if ( (ptr->pkgmgr == pkgmgr_freebsd) || (ptr->pkgmgr == pkgmgr_sun) )
             {
             InstallPackage( ptr->pkgmgr, &pending_pkgs );
             DeleteItemList( pending_pkgs );
@@ -2809,19 +2810,19 @@ for (ptr = VPKG; ptr != NULL; ptr=ptr->n
       }
  
    ptr->done = 'y';
+   ReleaseCurrentLock();
    if( ptr->action != pkgaction_none )
       {
       prev_action = ptr->action;
       prev_pkgmgr = ptr->pkgmgr;
       }
-   ReleaseCurrentLock();
+   }
 
    if(pending_pkgs != NULL)
       {
       ProcessPendingPackages(prev_pkgmgr, prev_action, &pending_pkgs);
       DeleteItemList( pending_pkgs );
       }
-   }
 }
 
 void ProcessPendingPackages (enum pkgmgrs pkgmgr, enum pkgactions action, 
struct Item **pending_pkgs)

--
Eric Searcy
OSU Open Source Lab

_______________________________________________
Bug-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/bug-cfengine

Reply via email to