diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog index f9f13800468d762da51dfc43af8849aeaed63b99..ad616633dcb3241ba809b3fb3d12bde22d56bc45 100644 --- a/libmudflap/ChangeLog +++ b/libmudflap/ChangeLog @@ -1,3 +1,14 @@ +2005-08-14 Ulrich Weigand <weigand@informatik.uni-erlangen.de> + + * mf-runtime.c (__mf_state_1): Initialize to reentrant. + (__mf_init): Set thread state active. + * mf-hooks3.c (__mf_pthread_spawner): Always set thread + state active. + (pthread_create wrapper): Always use thread spawner. + + * testsuite/libmudflap.cth/pass37-frag.c: Increase timeout. + * testsuite/libmudflap.cth/pass39-frag.c: Likewise. + 2005-07-16 Richard Henderson <rth@redhat.com> * acinclude.m4: New file. diff --git a/libmudflap/mf-hooks3.c b/libmudflap/mf-hooks3.c index f3006b20fe08b1b53a079b9d0a4692a88aa1e8cf..73a7f717131851dc23d06a12dab0c4eae035c46c 100644 --- a/libmudflap/mf-hooks3.c +++ b/libmudflap/mf-hooks3.c @@ -245,9 +245,7 @@ __mf_pthread_spawner (void *arg) { void *result = NULL; -#ifndef HAVE_TLS __mf_set_state (active); -#endif /* NB: We could use __MF_TYPE_STATIC here, but we guess that the thread errno is coming out of some dynamically allocated pool that we already @@ -291,31 +289,15 @@ __mf_0fn_pthread_create (pthread_t *thr, const pthread_attr_t *attr, WRAPPER(int, pthread_create, pthread_t *thr, const pthread_attr_t *attr, void * (*start) (void *), void *arg) { - int result, need_wrapper = 0; + struct mf_thread_start_info *si; TRACE ("pthread_create\n"); -#ifndef HAVE_TLS - need_wrapper = 1; -#endif - need_wrapper |= __mf_opts.heur_std_data != 0; - - if (need_wrapper) - { - struct mf_thread_start_info *si = CALL_REAL (malloc, sizeof (*si)); - - /* Fill in startup-control fields. */ - si->user_fn = start; - si->user_arg = arg; + /* Fill in startup-control fields. */ + si = CALL_REAL (malloc, sizeof (*si)); + si->user_fn = start; + si->user_arg = arg; - /* Actually create the thread. */ - result = CALL_REAL (pthread_create, thr, attr, __mf_pthread_spawner, si); - } - else - { - /* If we're not handling heur_std_data, nothing special to do. */ - result = CALL_REAL (pthread_create, thr, attr, start, arg); - } - - return result; + /* Actually create the thread. */ + return CALL_REAL (pthread_create, thr, attr, __mf_pthread_spawner, si); } diff --git a/libmudflap/mf-runtime.c b/libmudflap/mf-runtime.c index af584e773d938789abefaf8530b29c98efbb06ac..e6901650975735fa257fb62726070ab37d5d96b5 100644 --- a/libmudflap/mf-runtime.c +++ b/libmudflap/mf-runtime.c @@ -178,10 +178,10 @@ int __mf_starting_p = 1; #ifdef LIBMUDFLAPTH #ifdef HAVE_TLS -__thread enum __mf_state_enum __mf_state_1 = active; +__thread enum __mf_state_enum __mf_state_1 = reentrant; #endif #else -enum __mf_state_enum __mf_state_1 = active; +enum __mf_state_enum __mf_state_1 = reentrant; #endif #ifdef LIBMUDFLAPTH @@ -697,6 +697,8 @@ __mf_init () #endif __mf_starting_p = 0; + __mf_set_state (active); + __mf_set_default_options (); ov = getenv ("MUDFLAP_OPTIONS"); diff --git a/libmudflap/testsuite/libmudflap.cth/pass37-frag.c b/libmudflap/testsuite/libmudflap.cth/pass37-frag.c index bfa2c7c02ab7883a9d5eeb2d7bbac9f049558505..877803c1ea028489384c8fdbf08e04bf9e9fb070 100644 --- a/libmudflap/testsuite/libmudflap.cth/pass37-frag.c +++ b/libmudflap/testsuite/libmudflap.cth/pass37-frag.c @@ -55,4 +55,4 @@ int main () /* { dg-output "100 100 100 100 100 100 100 100 100 100" } */ /* { dg-repetitions 20 } */ -/* { dg-timeout 3 } */ +/* { dg-timeout 10 } */ diff --git a/libmudflap/testsuite/libmudflap.cth/pass39-frag.c b/libmudflap/testsuite/libmudflap.cth/pass39-frag.c index eb3449e9d8bcd3d9de17d2922fe77644a413d7f3..cd3eb5abdafb61b03733c9c1a3a7663c03ee1feb 100644 --- a/libmudflap/testsuite/libmudflap.cth/pass39-frag.c +++ b/libmudflap/testsuite/libmudflap.cth/pass39-frag.c @@ -54,4 +54,4 @@ int main () } /* { dg-output "100 100 100 100 100 100 100 100 100 100" } */ /* { dg-repetitions 20 } */ -/* { dg-timeout 3 } */ +/* { dg-timeout 10 } */