git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@32473 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2011-03-06 13:00:46 +00:00
parent 7fd6ab7ca8
commit 262a0e972f

View file

@ -6,9 +6,9 @@
#include <stdio.h>
#if defined(_WIN32)
#define mySleep(X) usleep(1000*(X))
# define mySleep(X) usleep(1000*(X))
#else
#define mySleep(X) sleep(X)
# define mySleep(X) sleep(X)
#endif
static unsigned initialize_entered = 0;
@ -25,7 +25,7 @@ static BOOL may_proceed = NO;
{
initialize_entered++;
while (NO == may_proceed)
mySleep(1);
;
initialize_exited++;
}
@ -52,45 +52,46 @@ main()
if (0 == pthread_create(&t1, 0, test, 0))
{
while (0 == initialize_entered && counter++ < 3)
{
mySleep(1);
}
{
mySleep(1);
}
if (0 == initialize_entered)
{
fprintf(stderr, "Failed to initialize\n");
return 1;
}
{
fprintf(stderr, "Failed to initialize\n");
return 1;
}
if (0 == pthread_create(&t2, 0, test, 0))
{
mySleep(1);
/* Wait long enough for t2 to try calling +class
*/
mySleep(1);
if (class_entered > 0)
{
fprintf(stderr, "class entered prematurely\n");
return 1;
}
may_proceed = YES;
// sleep longer than t1 may need to complete initialize
// plus time for t1 and t2 to complete "test"
mySleep(2);
if (2 == class_entered)
{
return 0; // OK
}
fprintf(stderr, "problem with initialize\n");
return 1;
}
else
if (class_entered > 0)
{
fprintf(stderr, "failed to create t2\n");
fprintf(stderr, "class entered prematurely\n");
return 1;
}
/* Let t1 proceed and wait long enough for it to complete
* +initialize and for both threads to call +class
*/
may_proceed = YES;
mySleep(1);
if (2 == class_entered)
{
return 0; // OK
}
fprintf(stderr, "problem with initialize\n");
return 1;
}
else
{
fprintf(stderr, "failed to create t2\n");
return 1;
}
}
else
{