mf-runtime.c (__mf_state_1): Initialize to reentrant.

* 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.

From-SVN: r103084
This commit is contained in:
Ulrich Weigand 2005-08-14 19:38:34 +00:00 committed by Ulrich Weigand
parent 8971094d72
commit 22f99b8212
5 changed files with 24 additions and 29 deletions

View File

@ -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> 2005-07-16 Richard Henderson <rth@redhat.com>
* acinclude.m4: New file. * acinclude.m4: New file.

View File

@ -245,9 +245,7 @@ __mf_pthread_spawner (void *arg)
{ {
void *result = NULL; void *result = NULL;
#ifndef HAVE_TLS
__mf_set_state (active); __mf_set_state (active);
#endif
/* NB: We could use __MF_TYPE_STATIC here, but we guess that the thread /* 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 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, WRAPPER(int, pthread_create, pthread_t *thr, const pthread_attr_t *attr,
void * (*start) (void *), void *arg) void * (*start) (void *), void *arg)
{ {
int result, need_wrapper = 0; struct mf_thread_start_info *si;
TRACE ("pthread_create\n"); 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. */ /* Fill in startup-control fields. */
si = CALL_REAL (malloc, sizeof (*si));
si->user_fn = start; si->user_fn = start;
si->user_arg = arg; si->user_arg = arg;
/* Actually create the thread. */ /* Actually create the thread. */
result = CALL_REAL (pthread_create, thr, attr, __mf_pthread_spawner, si); return 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;
} }

View File

@ -178,10 +178,10 @@ int __mf_starting_p = 1;
#ifdef LIBMUDFLAPTH #ifdef LIBMUDFLAPTH
#ifdef HAVE_TLS #ifdef HAVE_TLS
__thread enum __mf_state_enum __mf_state_1 = active; __thread enum __mf_state_enum __mf_state_1 = reentrant;
#endif #endif
#else #else
enum __mf_state_enum __mf_state_1 = active; enum __mf_state_enum __mf_state_1 = reentrant;
#endif #endif
#ifdef LIBMUDFLAPTH #ifdef LIBMUDFLAPTH
@ -697,6 +697,8 @@ __mf_init ()
#endif #endif
__mf_starting_p = 0; __mf_starting_p = 0;
__mf_set_state (active);
__mf_set_default_options (); __mf_set_default_options ();
ov = getenv ("MUDFLAP_OPTIONS"); ov = getenv ("MUDFLAP_OPTIONS");

View File

@ -55,4 +55,4 @@ int main ()
/* { dg-output "100 100 100 100 100 100 100 100 100 100" } */ /* { dg-output "100 100 100 100 100 100 100 100 100 100" } */
/* { dg-repetitions 20 } */ /* { dg-repetitions 20 } */
/* { dg-timeout 3 } */ /* { dg-timeout 10 } */

View File

@ -54,4 +54,4 @@ int main ()
} }
/* { dg-output "100 100 100 100 100 100 100 100 100 100" } */ /* { dg-output "100 100 100 100 100 100 100 100 100 100" } */
/* { dg-repetitions 20 } */ /* { dg-repetitions 20 } */
/* { dg-timeout 3 } */ /* { dg-timeout 10 } */