On Friday 18 March 2016 11:55:31 Konstantin Belousov wrote: > On Fri, Mar 18, 2016 at 08:14:57AM +0200, Konstantin Belousov wrote: > > Yes, please. It would be significantly easier to diagnose the problem if > > the minimal example is provided. If not, please pack one crashing app > > and all it non-system libraries and provide the tarball to me. > > Meantime you could also try the following change. I doubt that it would > fix your issue, but it is possibly related. Only libthr needs to be > rebuilt. I will try it tomorrow morning and will send the report. Thank you! > > diff --git a/lib/libthr/thread/thr_fork.c b/lib/libthr/thread/thr_fork.c > index 7256b68..531e09c 100644 > --- a/lib/libthr/thread/thr_fork.c > +++ b/lib/libthr/thread/thr_fork.c > _at__at_ -168,6 +168,7 _at__at_ __thr_fork(void) > if (_thr_isthreaded() != 0) { > was_threaded = 1; > _malloc_prefork(); > + __thr_pshared_atfork_pre(); > _rtld_atfork_pre(rtld_locks); > } else { > was_threaded = 0; > _at__at_ -202,8 +203,10 _at__at_ __thr_fork(void) > > _thr_signal_postfork_child(); > > - if (was_threaded) > + if (was_threaded) { > _rtld_atfork_post(rtld_locks); > + __thr_pshared_atfork_post(); > + } > _thr_setthreaded(0); > > /* reinitalize library. */ > _at__at_ -236,6 +239,7 _at__at_ __thr_fork(void) > > if (was_threaded) { > _rtld_atfork_post(rtld_locks); > + __thr_pshared_atfork_post(); > _malloc_postfork(); > } > > diff --git a/lib/libthr/thread/thr_init.c b/lib/libthr/thread/thr_init.c > index 3c81299..5e7f01c 100644 > --- a/lib/libthr/thread/thr_init.c > +++ b/lib/libthr/thread/thr_init.c > _at__at_ -466,7 +466,6 _at__at_ init_private(void) > _thr_once_init(); > _thr_spinlock_init(); > _thr_list_init(); > - __thr_pshared_init(); > _thr_wake_addr_init(); > _sleepq_init(); > _single_thread = NULL; > _at__at_ -477,6 +476,7 _at__at_ init_private(void) > * e.g. after a fork(). > */ > if (init_once == 0) { > + __thr_pshared_init(); > /* Find the stack top */ > mib[0] = CTL_KERN; > mib[1] = KERN_USRSTACK; > diff --git a/lib/libthr/thread/thr_private.h > b/lib/libthr/thread/thr_private.h index 31f8e6c..7ee1fbf 100644 > --- a/lib/libthr/thread/thr_private.h > +++ b/lib/libthr/thread/thr_private.h > _at__at_ -952,6 +952,8 _at__at_ void _tcb_dtor(struct tcb *); > void __thr_pshared_init(void) __hidden; > void *__thr_pshared_offpage(void *key, int doalloc) __hidden; > void __thr_pshared_destroy(void *key) __hidden; > +void __thr_pshared_atfork_pre(void) __hidden; > +void __thr_pshared_atfork_post(void) __hidden; > > __END_DECLS > > diff --git a/lib/libthr/thread/thr_pshared.c > b/lib/libthr/thread/thr_pshared.c index e8ccf1c..8371478 100644 > --- a/lib/libthr/thread/thr_pshared.c > +++ b/lib/libthr/thread/thr_pshared.c > _at__at_ -252,3 +252,17 _at__at_ __thr_pshared_destroy(void *key) > pshared_clean(key, val); > pshared_gc(curthread); > } > + > +void > +__thr_pshared_atfork_pre(void) > +{ > + > + _thr_rwl_rdlock(&pshared_lock); > +} > + > +void > +__thr_pshared_atfork_post(void) > +{ > + > + _thr_rwl_unlock(&pshared_lock); > +}Received on Fri Mar 18 2016 - 09:15:21 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:03 UTC