Skip site navigation (1)Skip section navigation (2)
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>