From owner-freebsd-threads@FreeBSD.ORG Fri Aug 29 14:36:52 2008 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 87856106567C; Fri, 29 Aug 2008 14:36:52 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from mail.terabit.net.ua (mail.terabit.net.ua [195.137.202.147]) by mx1.freebsd.org (Postfix) with ESMTP id 27E9C8FC1B; Fri, 29 Aug 2008 14:36:52 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from skuns.zoral.com.ua ([91.193.166.194] helo=mail.zoral.com.ua) by mail.terabit.net.ua with esmtp (Exim 4.63 (FreeBSD)) (envelope-from ) id 1KZ55n-000NU8-4h; Fri, 29 Aug 2008 17:36:51 +0300 Received: from deviant.kiev.zoral.com.ua (root@deviant.kiev.zoral.com.ua [10.1.1.148]) by mail.zoral.com.ua (8.14.2/8.14.2) with ESMTP id m7TEajhc009082 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 29 Aug 2008 17:36:45 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: from deviant.kiev.zoral.com.ua (kostik@localhost [127.0.0.1]) by deviant.kiev.zoral.com.ua (8.14.2/8.14.2) with ESMTP id m7TEaj12022295; Fri, 29 Aug 2008 17:36:45 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: (from kostik@localhost) by deviant.kiev.zoral.com.ua (8.14.2/8.14.2/Submit) id m7TEaj9u022294; Fri, 29 Aug 2008 17:36:45 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: deviant.kiev.zoral.com.ua: kostik set sender to kostikbel@gmail.com using -f Date: Fri, 29 Aug 2008 17:36:45 +0300 From: Kostik Belousov To: Andriy Gapon Message-ID: <20080829143645.GY2038@deviant.kiev.zoral.com.ua> References: <48B70A98.5060501@icyb.net.ua> <48B7101E.7060203@icyb.net.ua> <48B71BA6.5040504@icyb.net.ua> <20080829141043.GX2038@deviant.kiev.zoral.com.ua> <48B8052A.6070908@icyb.net.ua> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="krsqJi1PDCheOQxO" Content-Disposition: inline In-Reply-To: <48B8052A.6070908@icyb.net.ua> User-Agent: Mutt/1.4.2.3i X-Virus-Scanned: ClamAV version 0.93.3, clamav-milter version 0.93.3 on skuns.kiev.zoral.com.ua X-Virus-Status: Clean X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on skuns.kiev.zoral.com.ua X-Virus-Scanned: mail.terabit.net.ua 1KZ55n-000NU8-4h 66cf6bd2f49013fbb041cf2f64e2e3bc X-Terabit: YES Cc: davidxu@freebsd.org, freebsd-threads@freebsd.org Subject: Re: mysterious hang in pthread_create X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Aug 2008 14:36:52 -0000 --krsqJi1PDCheOQxO Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Aug 29, 2008 at 05:18:18PM +0300, Andriy Gapon wrote: >=20 > Kostik, thanks! >=20 > on 29/08/2008 17:10 Kostik Belousov said the following: > > I am wondering why did you not fixed it youself with all this informati= on. >=20 > I am wondering that myself now :-) > I got bogged in rtld details and simply didn't think about the solution > of doing setthreaded earlier. >=20 > I will try your patch a couple of hours later. > BTW, a forward question - should this patch help in the case of an > exception thrown (and caught) before main(), i.e. in constructors of > static/global objects? If the objects are from the executable, then yes. I do not know about present situation, but some time ago g++ and several other compilers called ctr for global objects from the main() function. Regardeless of this, init for main executable shall be called after init for dependencies is finished. See initlist_add_objects(). On the other hand, ctr calls from linked dso may get fixed in regard of exception throwing, or may not, depending on the relative order of the dso loading against libthr. >=20 > > Anyway, patch below seems to work for me. David may have an opinion on > > the change. > >=20 > > diff --git a/lib/libthr/thread/thr_init.c b/lib/libthr/thread/thr_init.c > > index f96bba9..785d610 100644 > > --- a/lib/libthr/thread/thr_init.c > > +++ b/lib/libthr/thread/thr_init.c > > @@ -355,6 +355,9 @@ _libpthread_init(struct pthread *curthread) > > if (_thread_event_mask & TD_CREATE) > > _thr_report_creation(curthread, curthread); > > } > > + > > + if (_thr_isthreaded() =3D=3D 0) > > + _thr_setthreaded(1); > > } > > =20 > > /* >=20 >=20 > --=20 > Andriy Gapon --krsqJi1PDCheOQxO Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEARECAAYFAki4CXwACgkQC3+MBN1Mb4jUoACgkl9pFn0bJG9TCvbVEwPUrNll sP4An2H6Ur59mzl7qiNd+CUXegQz5VJY =yf2+ -----END PGP SIGNATURE----- --krsqJi1PDCheOQxO--