22f99b8212
* 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
59 lines
1.1 KiB
C
59 lines
1.1 KiB
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <pthread.h>
|
|
#include <sched.h>
|
|
|
|
static void *
|
|
func (void *p)
|
|
{
|
|
int *counter = (int *) p;
|
|
unsigned i;
|
|
|
|
for (i=0; i<100; i++)
|
|
{
|
|
(*counter) ++;
|
|
{
|
|
int array[17];
|
|
unsigned x = i % (sizeof(array)/sizeof(array[0]));
|
|
/* VRP could prove that x is within [0,16], but until then, the
|
|
following access will ensure that array[] is registered to
|
|
libmudflap. */
|
|
array[x] = i;
|
|
}
|
|
sched_yield (); /* sleep (1); */
|
|
}
|
|
|
|
return (NULL);
|
|
}
|
|
|
|
|
|
int main ()
|
|
{
|
|
int rc;
|
|
unsigned i;
|
|
enum foo { NT=10 };
|
|
pthread_t threads[NT];
|
|
int counts[NT];
|
|
|
|
|
|
for (i=0; i<NT; i++)
|
|
{
|
|
counts[i] = 0;
|
|
rc = pthread_create (& threads[i], NULL, func, (void *) & counts[i]);
|
|
if (rc) abort();
|
|
}
|
|
|
|
for (i=0; i<NT; i++)
|
|
{
|
|
rc = pthread_join (threads[i], NULL);
|
|
if (rc) abort();
|
|
printf ("%d%s", counts[i], (i==NT-1) ? "\n" : " ");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* { dg-output "100 100 100 100 100 100 100 100 100 100" } */
|
|
/* { dg-repetitions 20 } */
|
|
/* { dg-timeout 10 } */
|