Do not use pth functions after pth_kill. Fixes bug#1320.
authorWerner Koch <wk@gnupg.org>
Fri, 29 Apr 2011 08:16:58 +0000 (10:16 +0200)
committerWerner Koch <wk@gnupg.org>
Fri, 29 Apr 2011 08:16:58 +0000 (10:16 +0200)
commitce98524554cae68b90c0b0e67026006ac529065a
treebf2ec1487fe36fd3fa905173495317d0406a26e2
parent1226772ffd37382f549df89c1425d272d4ad7aac
Do not use pth functions after pth_kill.  Fixes bug#1320.

Fabian Keil found the reason for a SIGBUS:

  In the "gpg-agent --daemon" case, main() calls pth_kill()
  after the client has been forked, so when es_deinit() is
  called on exit, acquiring the estream_list_lock seems to
  cause pth to dereference a pointer located in a memory
  region that has previously been free()'d.

My approach to fix it is different than his suggestion.  It should
allow to continue all estream operations after a pth_kill except for
restarting pth.
agent/ChangeLog
agent/gpg-agent.c
common/ChangeLog
common/estream.c
common/estream.h