Date: Fri, 29 Aug 2008 17:36:45 +0300 From: Kostik Belousov <kostikbel@gmail.com> To: Andriy Gapon <avg@icyb.net.ua> Cc: davidxu@freebsd.org, freebsd-threads@freebsd.org Subject: Re: mysterious hang in pthread_create Message-ID: <20080829143645.GY2038@deviant.kiev.zoral.com.ua> In-Reply-To: <48B8052A.6070908@icyb.net.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>
next in thread | previous in thread | raw e-mail | index | archive | help
--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--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080829143645.GY2038>