Browse Source

re-add APT::Keep-Fds:: for the dpkg status-fd in dpkgpm.cc as we always need this

tags/debian/0.9.13.exp1
Michael Vogt 8 years ago
parent
commit
5e9458e285
4 changed files with 21 additions and 15 deletions
  1. +6
    -0
      apt-pkg/deb/dpkgpm.cc
  2. +7
    -2
      apt-pkg/iprogress.cc
  3. +5
    -13
      apt-pkg/packagemanager.cc
  4. +3
    -0
      apt-private/private-install.cc

+ 6
- 0
apt-pkg/deb/dpkgpm.cc View File

@@ -1264,6 +1264,9 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
_error->DumpErrors(std::cerr);
_error->RevertToStack();

// this is the dpkg status-fd, we need to keep it
_config->Set("APT::Keep-Fds::",fd[1]);

// Tell the progress that its starting and fork dpkg
d->progress->Start();
pid_t Child = ExecFork();
@@ -1316,6 +1319,9 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
if (_config->FindB("DPkg::UseIoNice", false) == true)
ionice(Child);

// clear the Keep-Fd again
_config->Clear("APT::Keep-Fds",fd[1]);

// Wait for dpkg
int Status = 0;



+ 7
- 2
apt-pkg/iprogress.cc View File

@@ -8,7 +8,7 @@
#include <termios.h>
#include <sys/ioctl.h>
#include <sstream>
#include <fcntl.h>

namespace APT {
namespace Progress {
@@ -42,7 +42,12 @@ void PackageManagerProgressFd::WriteToStatusFd(std::string s)

void PackageManagerProgressFd::Start()
{
_config->Set("APT::Keep-Fds::", OutStatusFd);
if(OutStatusFd <= 0)
return;

// FIXME: use SetCloseExec here once it taught about throwing
// exceptions instead of doing _exit(100) on failure
fcntl(OutStatusFd,F_SETFD,FD_CLOEXEC);

// send status information that we are about to fork dpkg
std::ostringstream status;


+ 5
- 13
apt-pkg/packagemanager.cc View File

@@ -26,7 +26,6 @@
#include <apt-pkg/sptr.h>

#include <iostream>
#include <fcntl.h>

#include <apti18n.h>
/*}}}*/
@@ -1034,18 +1033,11 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall()
pkgPackageManager::OrderResult
pkgPackageManager::DoInstallPostFork(APT::Progress::PackageManager *progress)
{
// FIXME: port to new structure
#if 0
if(statusFd > 0)
// FIXME: use SetCloseExec here once it taught about throwing
// exceptions instead of doing _exit(100) on failure
fcntl(statusFd,F_SETFD,FD_CLOEXEC);
#endif
bool goResult = Go(progress);
if(goResult == false)
return Failed;

return Res;
bool goResult = Go(progress);
if(goResult == false)
return Failed;
return Res;
};
/*}}}*/
// PM::DoInstall - Does the installation /*{{{*/


+ 3
- 0
apt-private/private-install.cc View File

@@ -104,12 +104,14 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety)
if (_config->FindB("APT::Get::Simulate") == true)
{
pkgSimulate PM(Cache);

int status_fd = _config->FindI("APT::Status-Fd",-1);
APT::Progress::PackageManager *progress = NULL;
if (status_fd > 0)
progress = new APT::Progress::PackageManagerProgressFd(status_fd);
pkgPackageManager::OrderResult Res = PM.DoInstall(progress);
delete progress;

if (Res == pkgPackageManager::Failed)
return false;
if (Res != pkgPackageManager::Completed)
@@ -341,6 +343,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety)
// FIXME: make this a factory
// select the right progress
int status_fd = _config->FindI("APT::Status-Fd",-1);

APT::Progress::PackageManager *progress = NULL;
if (status_fd > 0)
progress = new APT::Progress::PackageManagerProgressFd(status_fd);


Loading…
Cancel
Save