On Wed, Dec 06, 2006 at 12:09:43PM +0100, Pierre Habouzit wrote:
> Package: gnupg-agent
> Version: 2.0.0-5.1
> Severity: grave
> File: /usr/bin/gpg-agent
> Justification: renders package unusable
> 
>   after some time, gpg-agent sometimes get stuck, and does not work: gpg
> used with --use-agent option just says:
> 
>   gpg: problem with the agent - disabling agent use
> 
>   It's usually get stuck once a day rougly, implying an X session
> restart which is most than painful.
> 
> 
>   neither verbose, nor --debug-all seems to give any valuable from the
> gpg command line, and I don't really know how to get into a situation
> where it gets stuck to debug it :|
> 
>   though I have one stuck instance running atm, is there any tests I can
> perform to know what's going on wrong ? I've checked $GPG_AGENT_INFO are
> correct, the socket is here, and gpg-agent is running the right pid, and
> fuser says that gpg-agent is still owning the socket.

  I've compared the strace of a stuck gpg-agent and a working one, the
stuck one seems to receive a SIGPIPE when it writes to stdout. and yes
my gpg-agent is launched with the switch --daemon:

==== broken trace: ====

fcntl(0, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(0, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(0, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
select(1, NULL, [0], NULL, {0, 0})      = 1 (out [0], left {0, 0})
write(0, "OK closing connection", 21)   = -1 EPIPE (Broken pipe)
--- SIGPIPE (Broken pipe) @ 0 (0) ---
fcntl(0, F_GETFL)                       = 0x802 (flags O_RDWR|O_NONBLOCK)
fcntl(0, F_SETFL, O_RDWR)               = 0
close(0)                                = 0

==== "good" trace ====
fcntl(6, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(6, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
select(7, NULL, [6], NULL, {0, 0})      = 1 (out [6], left {0, 0})
write(6, "OK closing connection", 21)   = 21
fcntl(6, F_GETFL)                       = 0x802 (flags O_RDWR|O_NONBLOCK)
fcntl(6, F_SETFL, O_RDWR)               = 0
fcntl(6, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(6, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
select(7, NULL, [6], NULL, {0, 0})      = 1 (out [6], left {0, 0})
write(6, "\n", 1)                       = 1
fcntl(6, F_GETFL)                       = 0x802 (flags O_RDWR|O_NONBLOCK)
fcntl(6, F_SETFL, O_RDWR)               = 0
close(6)                                = 0
socket(PF_FILE, SOCK_STREAM, 0)         = 6

=====================

  I've strictly no idea how the broken gpg-agent got into that stupid
state though.


-- 
·O·  Pierre Habouzit
··O                                                [EMAIL PROTECTED]
OOO                                                http://www.madism.org

Reply via email to