Comment 25 for bug 1727653

Václav Haisman (vzeman79) wrote :

So I have several (over 5) processes in the previously mentioned state: Duplicity with a dozen or so gpg processes under it, hanging, duplicity is being run as `usr/bin/duplicity restore`.

I have attached generated a core dump, downloaded symbols and analysed the core dump with GDB. This is the stack trace:

#0 0x00007f6a2a3130c4 in __GI___libc_write (fd=1, buf=buf@entry=0x55af21404900, nbytes=nbytes@entry=4096) at ../sysdeps/unix/sysv/linux/write.c:26
#1 0x00007f6a2a291ba7 in _IO_new_file_write (f=0x7f6a2a5ea720 <_IO_2_1_stdout_>, data=0x55af21404900, n=4096) at fileops.c:1255
#2 0x00007f6a2a293782 in new_do_write (to_do=4096,
    data=0x55af21404900 "**REDACTED**", fp=0x7f6a2a5ea720 <_IO_2_1_stdout_>) at fileops.c:510
#3 _IO_new_do_write (fp=0x7f6a2a5ea720 <_IO_2_1_stdout_>,
    data=0x55af21404900 "**REDACTED**", to_do=4096) at fileops.c:486
#4 0x00007f6a2a2923bd in _IO_new_file_xsputn (f=0x7f6a2a5ea720 <_IO_2_1_stdout_>, data=<optimized out>, n=8192) at fileops.c:1323
#5 0x00007f6a2a28651b in __GI__IO_fwrite (buf=buf@entry=0x55af213d57b0, size=size@entry=1, count=count@entry=8192, fp=0x7f6a2a5ea720 <_IO_2_1_stdout_>) at iofwrite.c:39
#6 0x00007f6a2a5f31ec in func_fp_write (cookie=0x55af213d5730, buffer=0x55af213d57b0, size=8192) at ../../src/estream.c:1523
#7 0x00007f6a2a5f2b18 in flush_stream (stream=stream@entry=0x55af213d5750) at ../../src/estream.c:1965
#8 0x00007f6a2a5f3108 in es_write_fbf (stream=stream@entry=0x55af213d5750,
    buffer=buffer@entry=0x55af213fc8f0 "**REDACTED**", bytes_to_write=bytes_to_write@entry=32768, bytes_written=bytes_written@entry=0x7fffb74c6d30) at ../../src/estream.c:2711
#9 0x00007f6a2a5f4313 in es_writen (stream=stream@entry=0x55af213d5750, buffer=buffer@entry=0x55af213fc8f0, bytes_to_write=32768, bytes_written=bytes_written@entry=0x7fffb74c6da0)
    at ../../src/estream.c:2813
#10 0x00007f6a2a5f5fac in _gpgrt_fwrite (ptr=ptr@entry=0x55af213fc8f0, size=size@entry=1, nitems=nitems@entry=32768, stream=0x55af213d5750) at ../../src/estream.c:4221
#11 0x00007f6a2a5fae35 in gpgrt_fwrite (ptr=ptr@entry=0x55af213fc8f0, size=size@entry=1, nitems=nitems@entry=32768, stream=<optimized out>) at ../../src/visibility.c:466
#12 0x000055af1f4b53a2 in handle_plaintext (pt=pt@entry=0x55af213dbbb0, mfx=mfx@entry=0x55af213efcd0, nooutput=<optimized out>, clearsig=clearsig@entry=0) at ../../g10/plaintext.c:426
#13 0x000055af1f4a0ddc in proc_plaintext (c=c@entry=0x55af213efcb0, pkt=pkt@entry=0x55af213efd60) at ../../g10/mainproc.c:760
#14 0x000055af1f4a3d7b in do_proc_packets (ctrl=0x55af213dbb30, c=0x55af213efcb0, a=0x55af213e72a0) at ../../g10/mainproc.c:1412
#15 0x000055af1f4a3f0a in proc_packets (ctrl=ctrl@entry=0x55af213dbb30, anchor=anchor@entry=0x55af213edaf0, a=0x55af213e72a0) at ../../g10/mainproc.c:1181
#16 0x000055af1f492aaf in handle_compressed (ctrl=0x55af213dbb30, procctx=procctx@entry=0x55af213edaf0, cd=0x55af213edba0, callback=callback@entry=0x0, passthru=passthru@entry=0x0)
    at ../../g10/compress.c:324
#17 0x000055af1f4a1070 in proc_compressed (c=c@entry=0x55af213edaf0, pkt=pkt@entry=0x55af213dcd90) at ../../g10/mainproc.c:819
#18 0x000055af1f4a3c9b in do_proc_packets (ctrl=0x55af213dbb30, c=0x55af213edaf0, a=0x55af213e72a0) at ../../g10/mainproc.c:1413
#19 0x000055af1f4a3f0a in proc_packets (ctrl=ctrl@entry=0x55af213dbb30, anchor=anchor@entry=0x55af213e9340, a=0x55af213e72a0) at ../../g10/mainproc.c:1181
#20 0x000055af1f4c355d in decrypt_data (ctrl=0x55af213dbb30, procctx=procctx@entry=0x55af213e9340, ed=0x55af213dcdd0, dek=0x7f6a2b8bb118) at ../../g10/decrypt-data.c:253
#21 0x000055af1f4a07f8 in proc_encrypted (c=c@entry=0x55af213e9340, pkt=pkt@entry=0x55af213dce10) at ../../g10/mainproc.c:603
#22 0x000055af1f4a3d0b in do_proc_packets (ctrl=0x55af213dbb30, c=0x55af213e9340, a=0x55af213e72a0) at ../../g10/mainproc.c:1411
#23 0x000055af1f4a4181 in proc_encryption_packets (ctrl=ctrl@entry=0x55af213dbb30, anchor=anchor@entry=0x0, a=a@entry=0x55af213e72a0) at ../../g10/mainproc.c:1280
#24 0x000055af1f4c21bb in decrypt_message (ctrl=0x55af213dbb30, filename=<optimized out>) at ../../g10/decrypt.c:88
#25 0x000055af1f4810d0 in main (argc=<optimized out>, argv=<optimized out>) at ../../g10/gpg.c:4045

I have redacted the write buffer contents but it is clear, IMHO, that it has deciphered some file and is trying to write it into the communication pipe Duplicity has established. I can't find it in the code **is it possible that Duplicity is not consuming the GPG output thus GPG never exits this threads waiting to `pthread_join()` after `wait()` are stuck thus no more threads can be started at some point?**