* apt-pkg/acquire-worker.cc:
authorMichael Vogt <michael.vogt@ubuntu.com>
Tue, 14 Jul 2009 09:22:41 +0000 (11:22 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Tue, 14 Jul 2009 09:22:41 +0000 (11:22 +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_main.cc

index 78c6873..4f0b52a 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 a5976cf..a7de09c 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 2db8ae6..d6e6a59 100644 (file)
@@ -1,3 +1,15 @@
+apt (0.7.21ubuntu2~ppa1) karmic; urgency=low
+
+  * 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, 02 Jul 2009 14:11:35 +0200
+
 apt (0.7.21ubuntu1) karmic; urgency=low
 
   * merged from the debian-sid bzr branch
index 2c46ab1..7815c2f 100644 (file)
@@ -1,5 +1,6 @@
 #include <apt-pkg/fileutl.h>
 #include <apt-pkg/acquire-method.h>
+#include <signal.h>
 
 #include "connect.h"
 #include "rfc2553emu.h"
@@ -10,6 +11,10 @@ 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();
 }