From owner-freebsd-current@FreeBSD.ORG Thu Oct 10 07:22:04 2013 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id D09FEFD8 for ; Thu, 10 Oct 2013 07:22:04 +0000 (UTC) (envelope-from ohartman@zedat.fu-berlin.de) Received: from outpost1.zedat.fu-berlin.de (outpost1.zedat.fu-berlin.de [130.133.4.66]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 67BDB259B for ; Thu, 10 Oct 2013 07:22:03 +0000 (UTC) Received: from inpost2.zedat.fu-berlin.de ([130.133.4.69]) by outpost1.zedat.fu-berlin.de (Exim 4.80.1) with esmtp (envelope-from ) id <1VUAZN-001iXK-HP>; Thu, 10 Oct 2013 09:22:01 +0200 Received: from g231191004.adsl.alicedsl.de ([92.231.191.4] helo=thor.walstatt.dyndns.org) by inpost2.zedat.fu-berlin.de (Exim 4.80.1) with esmtpsa (envelope-from ) id <1VUAZN-0035KF-Bl>; Thu, 10 Oct 2013 09:22:01 +0200 Date: Thu, 10 Oct 2013 09:21:55 +0200 From: "O. Hartmann" To: Fabian Keil Subject: Re: claws-mail deadlocking in iconv Message-ID: <20131010092155.2cadb667@thor.walstatt.dyndns.org> In-Reply-To: <73d40037.635a97ef@fabiankeil.de> References: <73d40037.635a97ef@fabiankeil.de> Organization: FU Berlin X-Mailer: Claws Mail 3.9.2 (GTK+ 2.24.19; amd64-portbld-freebsd10.0) Mime-Version: 1.0 Content-Type: multipart/signed; micalg=PGP-SHA1; boundary="Sig_/ZoMOI=M2qjSYT8l3U6hGz19"; protocol="application/pgp-signature" X-Originating-IP: 92.231.191.4 Cc: FreeBSD Current X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Oct 2013 07:22:04 -0000 --Sig_/ZoMOI=M2qjSYT8l3U6hGz19 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Wed, 9 Oct 2013 18:34:46 +0200 Fabian Keil wrote: > After the iconv import claws-mail started to deadlock in iconv every > now and then on my system, which prevented claws-mail from rendering > windows or reacting to input. >=20 > So far I haven't been able to reproduce this intentionally and various > rebuilds of ports, kernel and userland (mainly for other reasons) had > no effect. >=20 > When the problem occurs, trying to attach to the process causes > gdb and gdb76 to crash which also crashes claws-mail, but sending > SIGABRT causes a proper core dump that can be analysed with gdb. >=20 > The backtraces always show that there is only one thread running and > it's trying to lock cm_lock in _citrus_mapper_close(), which > apparently is already locked due to a _citrus_mapper_close() > recursion. Examples: >=20 > #0 _umtx_op_err () > at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37 37 > RSYSCALL_ERR(_umtx_op) [New Thread 80a806400 (LWP 100487/claws-mail)] > (gdb) where > #0 _umtx_op_err () > at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37 #1 > 0x00000008084861a6 in __thr_rwlock_wrlock (rwlock=3D0x80a8a47c0, > tsp=3D) > at /usr/src/lib/libthr/thread/thr_umtx.c:296 #2 0x0000000808489b1d > in rwlock_wrlock_common (rwlock=3D, abstime=3D0x0) > at /usr/src/lib/libthr/thread/thr_rwlock.c:267 #3 0x0000000808489a8b > in _pthread_rwlock_wrlock (rwlock=3D0x80a8a47c0) > at /usr/src/lib/libthr/thread/thr_rwlock.c:289 #4 0x000000080911e848 > in _citrus_mapper_close (cm=3D0x80b5a2d80) > at /usr/src/lib/libc/iconv/citrus_mapper.c:375 #5 0x000000080d205d18 > in _citrus_mapper_serial_mapper_uninit (cm=3D0x80b5a2d40) > at /usr/src/lib/libiconv_modules/mapper_parallel/../mapper_serial/citrus_= mapper_serial.c:110 > #6 0x000000080911e8d7 in mapper_close (cm=3D0x80b5a2d40) > at /usr/src/lib/libc/iconv/citrus_mapper.c:188 #7 0x000000080911e88c > in _citrus_mapper_close (cm=3D) > at /usr/src/lib/libc/iconv/citrus_mapper.c:384 #8 0x000000080c4e83f3 > in close_srcs (sl=3D0x80b591140) > at /usr/src/lib/libiconv_modules/iconv_std/citrus_iconv_std.c:206 #9 > 0x000000080c4e7dc9 in _citrus_iconv_std_iconv_uninit_shared > (ci=3D) > at /usr/src/lib/libiconv_modules/iconv_std/citrus_iconv_std.c:415 #10 > 0x00000008090f3f95 in release_shared (ci=3D0x80a8ee630) > at /usr/src/lib/libc/iconv/citrus_iconv.c:99 #11 0x00000008090f4002 > in _citrus_iconv_close (cv=3D0x80d88d5d0) > at /usr/src/lib/libc/iconv/citrus_iconv.c:335 #12 0x00000008090f1ca6 > in iconv_close (handle=3D0x80a8a47c0) > at /usr/src/lib/libc/iconv/iconv.c:131 #13 0x000000000046376d in > conv_iconv_strdup (inbuf=3D0x7fffffff58b0 "\n", src_code=3D0x80b5b4db0 > "Windows-1252", dest_code=3D0x6f03d0 "UTF-8") at codeconv.c:895 #14 > 0x0000000000463d13 in conv_convert (conv=3D0x80b5a4e80, > outbuf=3D0x7fffffff3720 "", outlen=3D8192, inbuf=3D0x7fffffff58b0 "\n") at > codeconv.c:734 #15 0x00000000005e22ac in textview_write_line > (textview=3D0x80a959cc0, str=3D0x7fffffff58b0 "\n", conv=3D0x80b5a4e80, > do_quote_folding=3D1) at textview.c:1573 #16 0x00000000005df8e4 in > textview_write_body (textview=3D0x80a959cc0, mimeinfo=3D0x80aad2d00) at > textview.c:1177 #17 0x00000000005e5363 in textview_add_part > (textview=3D0x80a959cc0, mimeinfo=3D0x80aad2d00) at textview.c:826 #18 > 0x00000000005e4053 in recursive_add_parts (textview=3D0x80a959cc0, > node=3D0x80a826190) at textview.c:839 #19 0x00000000005e4302 in > recursive_add_parts (textview=3D0x80a959cc0, node=3D0x80aa81d20) at > textview.c:888 #20 0x00000000005e4302 in recursive_add_parts > (textview=3D0x80a959cc0, node=3D0x80a828890) at textview.c:888 #21 > 0x00000000005defa1 in textview_add_parts (textview=3D0x80a959cc0, > mimeinfo=3D0x80b610700) at textview.c:898 #22 0x00000000005deb85 in > textview_show_part (textview=3D0x80a959cc0, mimeinfo=3D0x80b610700, > fp=3D0x8094319a0) at textview.c:645 [...] >=20 > #0 0x0000000808491b9c in __error () from /lib/libthr.so.3 > #1 0x000000080848bb1d in rwlock_wrlock_common (rwlock=3D optimized out>, abstime=3D0x0) > at /usr/src/lib/libthr/thread/thr_rwlock.c:267 #2 0x000000080848ba8b > in _pthread_rwlock_wrlock (rwlock=3D0x80a8ede20) > at /usr/src/lib/libthr/thread/thr_rwlock.c:289 #3 0x000000080911f848 > in _citrus_mapper_close (cm=3D0x80a8bfc40) > at /usr/src/lib/libc/iconv/citrus_mapper.c:375 #4 0x000000080ce02d18 > in _citrus_mapper_serial_mapper_uninit (cm=3D0x80a8bfc00) > at /usr/src/lib/libiconv_modules/mapper_parallel/../mapper_serial/citrus_= mapper_serial.c:110 > #5 0x000000080911f8d7 in mapper_close (cm=3D0x80a8bfc00) > at /usr/src/lib/libc/iconv/citrus_mapper.c:188 #6 0x000000080911f88c > in _citrus_mapper_close (cm=3D) > at /usr/src/lib/libc/iconv/citrus_mapper.c:384 #7 0x000000080c5893f3 > in close_srcs (sl=3D0x80a8edda0) > at /usr/src/lib/libiconv_modules/iconv_std/citrus_iconv_std.c:206 #8 > 0x000000080c588dc9 in _citrus_iconv_std_iconv_uninit_shared > (ci=3D) > at /usr/src/lib/libiconv_modules/iconv_std/citrus_iconv_std.c:415 #9 > 0x00000008090f4f95 in release_shared (ci=3D0x80b408890) > at /usr/src/lib/libc/iconv/citrus_iconv.c:99 #10 0x00000008090f5002 > in _citrus_iconv_close (cv=3D0x80b782630) > at /usr/src/lib/libc/iconv/citrus_iconv.c:335 #11 0x00000008090f2ca6 > in iconv_close (handle=3D0x80a8ede20) > at /usr/src/lib/libc/iconv/iconv.c:131 #12 0x000000000046376d in > conv_iconv_strdup ( inbuf=3D0x80b600e00 "[...]"..., > src_code=3D0x80b782640 "ISO-8859-15", dest_code=3D0x80c07ab24 "UTF-8") at > codeconv.c:895 #13 0x0000000000463f2f in conv_codeset_strdup > ( inbuf=3D0x80b600e00 "[...]"..., src_code=3D0x80b782640 "ISO-8859-15", > dest_code=3D0x80c07ab24 "UTF-8") at codeconv.c:774 #14 > 0x000000080c07a1a7 in get_part_as_string (mimeinfo=3D0x80aad2d80) at > pgpinline.c:153 #15 0x000000080c078333 in pgpinline_is_encrypted > (mimeinfo=3D0x80aad2d80) at pgpinline.c:375 [...] >=20 > #0 _umtx_op_err () > at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37 #1 > 0x00000008084861a6 in __thr_rwlock_wrlock (rwlock=3D0x80bf93f40, > tsp=3D) > at /usr/src/lib/libthr/thread/thr_umtx.c:296 #2 0x0000000808489b1d > in rwlock_wrlock_common (rwlock=3D, abstime=3D0x0) > at /usr/src/lib/libthr/thread/thr_rwlock.c:267 #3 0x0000000808489a8b > in _pthread_rwlock_wrlock (rwlock=3D0x80bf93f40) > at /usr/src/lib/libthr/thread/thr_rwlock.c:289 #4 0x000000080911e848 > in _citrus_mapper_close (cm=3D0x80bfa0b40) > at /usr/src/lib/libc/iconv/citrus_mapper.c:375 #5 0x000000080d08ad18 > in _citrus_mapper_serial_mapper_uninit (cm=3D0x80bfa0b00) > at /usr/src/lib/libiconv_modules/mapper_parallel/../mapper_serial/citrus_= mapper_serial.c:110 > #6 0x000000080911e8d7 in mapper_close (cm=3D0x80bfa0b00) > at /usr/src/lib/libc/iconv/citrus_mapper.c:188 #7 0x000000080911e88c > in _citrus_mapper_close (cm=3D) > at /usr/src/lib/libc/iconv/citrus_mapper.c:384 #8 0x000000080ae2c3f3 > in close_srcs (sl=3D0x80bf9fbc0) > at /usr/src/lib/libiconv_modules/iconv_std/citrus_iconv_std.c:206 #9 > 0x000000080ae2bdc9 in _citrus_iconv_std_iconv_uninit_shared > (ci=3D) > at /usr/src/lib/libiconv_modules/iconv_std/citrus_iconv_std.c:415 #10 > 0x00000008090f3f95 in release_shared (ci=3D0x80bd59ac0) > at /usr/src/lib/libc/iconv/citrus_iconv.c:99 #11 0x00000008090f4002 > in _citrus_iconv_close (cv=3D0x80dc1a3d0) > at /usr/src/lib/libc/iconv/citrus_iconv.c:335 #12 0x00000008090f1ca6 > in iconv_close (handle=3D0x80bf93f40) > at /usr/src/lib/libc/iconv/iconv.c:131 #13 0x000000000046376d in > conv_iconv_strdup (inbuf=3D0x80bd570c0 "[...]", src_code=3D0x7fffffff5d60 > "ISO-8859-2", dest_code=3D0x6f03d0 "UTF-8") at codeconv.c:895 #14 > 0x0000000000463f2f in conv_codeset_strdup (inbuf=3D0x80bd570c0 "[...]", > src_code=3D0x7fffffff5d60 "ISO-8859-2", dest_code=3D0x0) at > codeconv.c:774 #15 0x00000000005f63f0 in unmime_header > (encoded_str=3D0x7fffffff7e94 "[...]", addr_field=3D1) at unmime.c:144 > #16 0x0000000000464a56 in conv_unmime_header (str=3D0x7fffffff7e94 > "[...]", default_encoding=3D0x0, addr_field=3D1) at codeconv.c:1516 #17 > 0x000000000059588a in parse_stream (data=3D0x8094319a0, isstring=3D0, > flags=3D{perm_flags =3D 3, tmp_flags =3D 0}, full=3D0, decrypted=3D0) at > procheader.c:558 #18 0x0000000000595234 in procheader_parse_stream > (fp=3D0x8094319a0, flags=3D{perm_flags =3D 3, tmp_flags =3D 0}, full=3D0, > decrypted=3D0) at procheader.c:461 #19 0x0000000000595195 in > procheader_parse_file (file=3D0x80d4202b0 > "/home/fk/.claws-mail/tempfolder/processing/18", flags=3D{perm_flags =3D > 3, tmp_flags =3D 0}, full=3D0, decrypted=3D0) at procheader.c:354 [...] >=20 > This patch: > http://www.fabiankeil.de/sourcecode/freebsd/iconv-Let-_citrus_mapper_clos= e-unlock-cm_lock-before-calli.diff > seems to prevent the deadlock, but I'm not 100% sure that it's > correct and I'm also a bit surprised by the lack of reports from > other claws-mail users. >=20 > Did anyone else run into this or can comment on the patch or > the backtraces? >=20 > Fabian Hello Fabian, I can not go that sophisticated deep into the details like you. But I'm running claws-mail on a cutting-edge 10.0-CURRENT and I can confirm, that claws-mail starts locking up from time to time in the way you described. The frequency of such a non-rendering locked up window of claws-mail correlates with the frequency I use the client. I'll try the patch. Oliver --Sig_/ZoMOI=M2qjSYT8l3U6hGz19 Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (FreeBSD) iQEcBAEBAgAGBQJSVlWYAAoJEOgBcD7A/5N8dQUIAJpvCskF8/sW0+nuu6YzkrOm cWdVeIifq1rzpPNGkgtHStaoYumB5a4d1D/PasUfcrwAiyYqZmQgJNt8Su+DN/Dz 0szGaEqJ6M35f+H9iDZ5GUxnHGhXoBxB3n89ZCWk7sEp/A0vxez1ognmmJA4zwKK ulj4hM0Pb5w4Tr6jf9Tmy8wXM2kqvWdqxcbiUJCze1nFCpB6XXO9HFyi6oOl9mC3 3VjUYv9F4WcALjdIRY4BL+DCtduhJ0LDa70Q9h40DW0KF/bFrt1Zwj4fhp3RET2U y/fmVt41OEnvxUjXhKxHlo9nPqR7PpJjknKkdEPmzTjJ7iNiKavLqlDVSswFPUU= =o1ak -----END PGP SIGNATURE----- --Sig_/ZoMOI=M2qjSYT8l3U6hGz19--