]> git.saurik.com Git - apt.git/commitdiff
* apt-pkg/deb/dpkgpm.cc:
authorMichael Vogt <michael.vogt@ubuntu.com>
Wed, 17 Jun 2009 08:15:51 +0000 (10:15 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Wed, 17 Jun 2009 08:15:51 +0000 (10:15 +0200)
  - add Dpkg::UseIoNice boolean option to run dpkg with ionice -c3
    (off by default)

apt-pkg/deb/dpkgpm.cc
debian/changelog

index 1d45e70e905786aa2101616a1262ea02f97355b0..462f4a7394647327ca4de14588d1f29c27123ec8 100644 (file)
@@ -74,6 +74,31 @@ namespace
   };
 }
 
+/* helper function to ionice the given PID 
+
+ there is no C header for ionice yet - just the syscall interface
+ so we use the binary from util-linux
+*/
+static bool
+ionice(int PID)
+{
+   if (!FileExists("/usr/bin/ionice"))
+      return false;
+   pid_t Process = ExecFork();      
+   if (Process == 0)
+   {
+      char buf[32];
+      snprintf(buf, sizeof(buf), "-p%d", PID);
+      const char *Args[4];
+      Args[0] = "/usr/bin/ionice";
+      Args[1] = "-c3";
+      Args[2] = buf;
+      Args[3] = 0;
+      execv(Args[0], (char **)Args);
+   }
+   return ExecWait(Process, "ionice");
+}
+
 // DPkgPM::pkgDPkgPM - Constructor                                     /*{{{*/
 // ---------------------------------------------------------------------
 /* */
@@ -850,7 +875,6 @@ bool pkgDPkgPM::Go(int OutStatusFd)
               _exit(100);
         }
 
-
         /* No Job Control Stop Env is a magic dpkg var that prevents it
            from using sigstop */
         putenv((char *)"DPKG_NO_TSTP=yes");
@@ -859,6 +883,10 @@ bool pkgDPkgPM::Go(int OutStatusFd)
         _exit(100);
       }      
 
+      // apply ionice
+      if (_config->FindB("DPkg::UseIoNice", false) == true)
+        ionice(Child);
+
       // clear the Keep-Fd again
       _config->Clear("APT::Keep-Fds",fd[1]);
 
index 30e7b7591754d48d38f95df520680798d1f116df..a22f78401a7ce6c7a8b3524a64dbc1430834585c 100644 (file)
@@ -13,6 +13,9 @@ apt (0.7.21) UNRELEASED; urgency=low
   * apt-pkg/acquire.cc:
     - make the max pipeline depth of the acquire queue configurable
       via Acquire::Max-Pipeline-Depth
+  * apt-pkg/deb/dpkgpm.cc:
+    - add Dpkg::UseIoNice boolean option to run dpkg with ionice -c3
+      (off by default)
 
  -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 28 May 2009 17:51:42 +0200