--- do.c-0713	Fri Jul 13 12:28:34 2007
+++ do.c	Thu Jul 19 11:45:07 2007
@@ -2769,8 +2769,9 @@
    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 of %s didn't match previous action %s for package %s\n", pkgactions[ptr->action], pkgactions[prev_action], ptr->name );
       ProcessPendingPackages(prev_pkgmgr, prev_action, &pending_pkgs);
       DeleteItemList( pending_pkgs );
       }
@@ -2782,10 +2783,10 @@
       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 );
@@ -2801,10 +2802,10 @@
       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 );
@@ -2813,19 +2814,19 @@
       }
  
    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)
