]> git.saurik.com Git - apt.git/commitdiff
Only allow interupts when using, Immediate-Configure-All.
authorChristopher Baines <cbaines8@gmail.com>
Sun, 31 Jul 2011 15:26:39 +0000 (16:26 +0100)
committerChristopher Baines <cbaines8@gmail.com>
Sun, 31 Jul 2011 15:26:39 +0000 (16:26 +0100)
TODO for dpkgpm:
Useful messages about the interupt, what was done to what packages and what was not done to what packages.
Only fail when the system is in a clean state, at the moment it will fail either a configure or install run.

apt-pkg/deb/dpkgpm.cc

index 3dbbd7c97f1a7b95226968d7638e38083f09e428..47912665829d1fe718de8a049a41816a28d4fc8a 100644 (file)
@@ -889,7 +889,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
    OpenLog();
 
    // this loop is runs once per operation
    OpenLog();
 
    // this loop is runs once per operation
-   for (vector<Item>::const_iterator I = List.begin(); I != List.end() && !pkgPackageManager::SigINTStop;)
+   for (vector<Item>::const_iterator I = List.begin(); I != List.end();)
    {
       // Do all actions with the same Op in one run
       vector<Item>::const_iterator J = I;
    {
       // Do all actions with the same Op in one run
       vector<Item>::const_iterator J = I;
@@ -921,7 +921,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
       // the argument list is split in a way that A depends on B
       // and they are in the same "--configure A B" run
       // - with the split they may now be configured in different
       // the argument list is split in a way that A depends on B
       // and they are in the same "--configure A B" run
       // - with the split they may now be configured in different
-      //   runs
+      //   runs, using Immediate-Configure-All can help prevent this.
       if (J - I > (signed)MaxArgs)
         J = I + MaxArgs;
       
       if (J - I > (signed)MaxArgs)
         J = I + MaxArgs;
       
@@ -1064,6 +1064,9 @@ bool pkgDPkgPM::Go(int OutStatusFd)
         it doesn't die but we do! So we must also ignore it */
       sighandler_t old_SIGQUIT = signal(SIGQUIT,SIG_IGN);
       sighandler_t old_SIGINT = signal(SIGINT,SigINT);
         it doesn't die but we do! So we must also ignore it */
       sighandler_t old_SIGQUIT = signal(SIGQUIT,SIG_IGN);
       sighandler_t old_SIGINT = signal(SIGINT,SigINT);
+      
+      // Check here for any SIGINT
+      if (pkgPackageManager::SigINTStop) break;
 
       // ignore SIGHUP as well (debian #463030)
       sighandler_t old_SIGHUP = signal(SIGHUP,SIG_IGN);
 
       // ignore SIGHUP as well (debian #463030)
       sighandler_t old_SIGHUP = signal(SIGHUP,SIG_IGN);
@@ -1102,7 +1105,6 @@ bool pkgDPkgPM::Go(int OutStatusFd)
            sigprocmask(SIG_SETMASK, &original_sigmask, 0);
         }
       }
            sigprocmask(SIG_SETMASK, &original_sigmask, 0);
         }
       }
-
        // Fork dpkg
       pid_t Child;
       _config->Set("APT::Keep-Fds::",fd[1]);
        // Fork dpkg
       pid_t Child;
       _config->Set("APT::Keep-Fds::",fd[1]);