]> git.saurik.com Git - apt.git/commitdiff
* apt-pkg/acquire-worker.cc:
authorMichael Vogt <michael.vogt@ubuntu.com>
Thu, 2 Jul 2009 12:07:18 +0000 (14:07 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Thu, 2 Jul 2009 12:07:18 +0000 (14:07 +0200)
  - show error details of failed methods
* apt-pkg/contrib/fileutl.cc:
  - if a process aborts with signal, show signal number
* methods/http.cc:
  - ignore SIGPIPE, we deal with EPIPE from write in
    HttpMethod::ServerDie() (LP: #385144)

apt-pkg/acquire-worker.cc
apt-pkg/contrib/fileutl.cc
debian/changelog
methods/http.cc

index 78c68737c32f4d3aef1a37de6314e6b4cfd4d3e8..4f0b52af9739e213d5ef55d578bcbf5250c8f74e 100644 (file)
@@ -527,10 +527,6 @@ bool pkgAcquire::Worker::OutFdReady()
    
    if (Res <= 0)
       return MethodFailure();
-
-   // Hmm.. this should never happen.
-   if (Res < 0)
-      return true;
    
    OutQueue.erase(0,Res);
    if (OutQueue.empty() == true)
@@ -558,7 +554,8 @@ bool pkgAcquire::Worker::MethodFailure()
 {
    _error->Error("Method %s has died unexpectedly!",Access.c_str());
    
-   ExecWait(Process,Access.c_str(),true);
+   // do not reap the child here to show meaningfull error to the user
+   ExecWait(Process,Access.c_str(),false);
    Process = -1;
    close(InFd);
    close(OutFd);
index a5976cf3af811fb3abe6b3d0c966a6b2b6779b02..a7de09c44d6d99f1d779053fc5fef341a63cbb55 100644 (file)
@@ -450,8 +450,11 @@ bool ExecWait(pid_t Pid,const char *Name,bool Reap)
    {
       if (Reap == true)
         return false;
-      if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV)
-        return _error->Error(_("Sub-process %s received a segmentation fault."),Name);
+      if (WIFSIGNALED(Status) != 0)
+        if( WTERMSIG(Status) == SIGSEGV)
+           return _error->Error(_("Sub-process %s received a segmentation fault."),Name);
+        else 
+           return _error->Error(_("Sub-process %s received signal %u."),Name, WTERMSIG(Status));
 
       if (WIFEXITED(Status) != 0)
         return _error->Error(_("Sub-process %s returned an error code (%u)"),Name,WEXITSTATUS(Status));
index ba57dbadc3bc2db40b9392253e2deea2c9fdbb8b..65fd9e5901b84b3beb854352f8cf0882d345caf9 100644 (file)
@@ -20,6 +20,13 @@ apt (0.7.21) UNRELEASED; urgency=low
   * apt-pkg/algorithms.cc:
     - consider recommends when making the scores for the problem 
       resolver
+  * apt-pkg/acquire-worker.cc:
+    - show error details of failed methods
+  * apt-pkg/contrib/fileutl.cc:
+    - if a process aborts with signal, show signal number
+  * methods/http.cc:
+    - ignore SIGPIPE, we deal with EPIPE from write in 
+      HttpMethod::ServerDie() (LP: #385144)
 
  -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 28 May 2009 17:51:42 +0200
 
index 1bf798da44a9e02eac0d715186993380bd3146e8..006e89394a5282e7bc7c0125a638030fe41a5627 100644 (file)
@@ -1316,9 +1316,11 @@ int HttpMethod::Loop()
 int main()
 {
    setlocale(LC_ALL, "");
+   // ignore SIGPIPE, this can happen on write() if the socket
+   // closes the connection (this is dealt with via ServerDie())
+   signal(SIGPIPE, SIG_IGN);
 
    HttpMethod Mth;
-   
    return Mth.Loop();
 }