gpgme hangs in a multithreaded app

albrecht.dress@arcor.de albrecht.dress@arcor.de
Thu Mar 27 11:15:02 2003


Hi all!

I hacked RFC3156 support for the GNOME mail client balsa a few days ago, of course using gpgme (see http://home.arcor.de/dralbrecht.dress/balsa/balsa2-gpg.html). Balsa is a multithreaded app, and it works perfectly with Linux on a PowerMac. However, when running on an upgraded SuSE 7.2/ix86, balsa hangs in gpgme.

After interrupting the program, here's the bt in gdb:

(gdb) bt
#0  0x40cba9c4 in read () from /lib/libc.so.6
#1  0x40d28310 in __DTOR_END__ () from /usr/local/lib/libgpgme.so.6
#2  0x40d22c85 in _gpgme_io_read (fd=30, buffer=0xbffff17c, count=79) at posix-io.c:56
#3  0x40d24a24 in _gpgme_get_program_version (path=0x40d26720 "/usr/bin/gpg") at version.c:248
#4  0x40d1f81d in _gpgme_gpg_get_version () at rungpg.c:229
#5  0x40d1eaa6 in _gpgme_engine_get_version (proto=GPGME_PROTOCOL_OpenPGP) at engine.c:78
#6  0x40d1eda4 in _gpgme_engine_new (proto=GPGME_PROTOCOL_OpenPGP, r_engine=0x82f1c3c) at engine.c:172
#7  0x40d17e43 in _gpgme_op_reset (ctx=0x82f1c28, type=1) at op-support.c:44
#8  0x40d194a5 in _gpgme_op_verify_start (ctx=0x82f1c28, synchronous=1, sig=0x82cb798, text=0x829e148) at verify.c:372
#9  0x40d19651 in gpgme_op_verify (ctx=0x82f1c28, sig=0x82cb798, text=0x829e148, r_stat=0x829ced0) at verify.c:485
#10 0x080c8165 in libbalsa_body_check_signature (body=<incomplete type>) at rfc3156.c:228
[more stuff from balsa...; the ldd output is below]

I followed the remarks in the docs (yes, there *is* the call to gpgme_check_version). The strange thing is that if I build balsa without threading support, it does NOT hang.

Do you have any idea about the reason of the hang? How could I track it down or resolve the problem? Sorry if this is a dumb question, I'm new to the list...

Thanks in advance, Albrecht.


+++ldd output+++
albrecht@linux:~/Work-local/balsa-2.0.10 > ldd src/balsa
        libgnomeui-2.so.0 => /opt/gnome2/lib/libgnomeui-2.so.0 (0x40017000)
        libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x400a5000)
        libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x400b0000)
        libbonoboui-2.so.0 => /opt/gnome2/lib/libbonoboui-2.so.0 (0x400c8000)
        libgnome-2.so.0 => /opt/gnome2/lib/libgnome-2.so.0 (0x40124000)
        libesd.so.0 => /usr/lib/libesd.so.0 (0x40138000)
        libaudiofile.so.0 => /usr/lib/libaudiofile.so.0 (0x40140000)
        libgnomevfs-2.so.0 => /opt/gnome2/lib/libgnomevfs-2.so.0 (0x4015e000)
        libgconf-2.so.4 => /opt/gnome2/lib/libgconf-2.so.4 (0x40192000)
        librt.so.1 => /lib/librt.so.1 (0x401c6000)
        libgtkhtml-2.so.0 => /opt/gnome2/lib/libgtkhtml-2.so.0 (0x401d9000)
        libgailutil.so.16 => /usr/lib/libgailutil.so.16 (0x4022f000)
        libgnomeprintui-2.so.0 => /opt/gnome2/lib/libgnomeprintui-2.so.0 (0x40236000)
        libgnomeprint-2.so.0 => /opt/gnome2/lib/libgnomeprint-2.so.0 (0x40256000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x40696000)
        libgnomecanvas-2.so.0 => /opt/gnome2/lib/libgnomecanvas-2.so.0 (0x406cc000)
        libbonobo-2.so.0 => /opt/gnome2/lib/libbonobo-2.so.0 (0x406f6000)
        libORBitCosNaming-2.so.0 => /usr/lib/libORBitCosNaming-2.so.0 (0x4074f000)
        libbonobo-activation.so.4 => /opt/gnome2/lib/libbonobo-activation.so.4 (0x40754000)
        libORBit-2.so.0 => /usr/lib/libORBit-2.so.0 (0x40768000)
        libpopt.so.0 => /usr/lib/libpopt.so.0 (0x407a6000)
        liblinc.so.1 => /usr/lib/liblinc.so.1 (0x407ad000)
        libgthread-2.0.so.0 => /opt/gnome2/lib/libgthread-2.0.so.0 (0x407b6000)
        libart_lgpl_2.so.2 => /usr/lib/libart_lgpl_2.so.2 (0x407bb000)
        libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x407d1000)
        libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0x40801000)
        libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0x40a11000)
        libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0x40a6c000)
        libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x40a82000)
        libpangoxft-1.0.so.0 => /usr/lib/libpangoxft-1.0.so.0 (0x40a95000)
        libpangox-1.0.so.0 => /usr/lib/libpangox-1.0.so.0 (0x40ab6000)
        libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x40ac3000)
        libgobject-2.0.so.0 => /opt/gnome2/lib/libgobject-2.0.so.0 (0x40af5000)
        libgmodule-2.0.so.0 => /opt/gnome2/lib/libgmodule-2.0.so.0 (0x40b20000)
        libglib-2.0.so.0 => /opt/gnome2/lib/libglib-2.0.so.0 (0x40b24000)
        libpcreposix.so.0 => /usr/lib/libpcreposix.so.0 (0x40b7a000)
        libpcre.so.0 => /usr/lib/libpcre.so.0 (0x40b7d000)
        libpspell.so.4 => /usr/lib/libpspell.so.4 (0x40b86000)
        libltdl.so.0 => /usr/lib/libltdl.so.0 (0x40ba3000)
        libpspell-modules.so.1 => /usr/lib/libpspell-modules.so.1 (0x40ba8000)
        libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x40bab000)
        libc.so.6 => /lib/libc.so.6 (0x40bf4000)
        libgpgme.so.6 => /usr/local/lib/libgpgme.so.6 (0x40d10000)
        libxml2.so.2 => /usr/lib/libxml2.so.2 (0x40d2a000)
        libz.so.1 => /lib/libz.so.1 (0x40dcf000)
        libm.so.6 => /lib/libm.so.6 (0x40dde000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x40dfd000)
        libesmtp.so.5 => /usr/local/lib/libesmtp.so.5 (0x40e13000)
        libssl.so.0.9.6 => /usr/lib/libssl.so.0.9.6 (0x40e22000)
        libcrypto.so.0.9.6 => /usr/lib/libcrypto.so.0.9.6 (0x40e50000)
        libdl.so.2 => /lib/libdl.so.2 (0x40f11000)
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40f15000)
        libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0x40ff8000)
        libXft.so.1 => /usr/X11R6/lib/libXft.so.1 (0x41001000)
        libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0x41056000)
        libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x4105b000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)