View | Details | Raw Unified | Return to bug 16882 | Differences between
and this patch

Collapse All | Expand All

(-)a/nptl/Makefile (-1 / +1 lines)
Lines 210-216 tests = tst-typesizes \ Link Here
210
	tst-mutexpi1 tst-mutexpi2 tst-mutexpi3 tst-mutexpi4 tst-mutexpi5 \
210
	tst-mutexpi1 tst-mutexpi2 tst-mutexpi3 tst-mutexpi4 tst-mutexpi5 \
211
	tst-mutexpi5a tst-mutexpi6 tst-mutexpi7 tst-mutexpi7a tst-mutexpi8 \
211
	tst-mutexpi5a tst-mutexpi6 tst-mutexpi7 tst-mutexpi7a tst-mutexpi8 \
212
	tst-mutexpi9 \
212
	tst-mutexpi9 \
213
	tst-spin1 tst-spin2 tst-spin3 \
213
	tst-spin1 tst-spin2 tst-spin3 tst-spin4 \
214
	tst-cond1 tst-cond2 tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 \
214
	tst-cond1 tst-cond2 tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 \
215
	tst-cond8 tst-cond9 tst-cond10 tst-cond11 tst-cond12 tst-cond13 \
215
	tst-cond8 tst-cond9 tst-cond10 tst-cond11 tst-cond12 tst-cond13 \
216
	tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \
216
	tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \
(-)a/nptl/tst-spin4.c (-1 / +109 lines)
Line 0 Link Here
0
- 
1
#include <pthread.h>
2
#include <stdio.h>
3
#include <unistd.h>
4
5
static int count = 0;
6
7
static void *
8
thread_add_one (void *arg)
9
{
10
  int tmp;
11
  pthread_spinlock_t *lock = (pthread_spinlock_t *) arg;
12
13
  /* When do_test holds the lock for 1 sec, the two thread will be
14
     in contention for the lock. */
15
  if (pthread_spin_lock (lock) != 0)
16
    {
17
      puts ("thread_add_one(): spin_lock failed");
18
      pthread_exit ((void *) 1l);
19
    }
20
21
  /* sleep 1s before modifying count */
22
  tmp = count;
23
  sleep (1);
24
  count = tmp + 1;
25
26
  if (pthread_spin_unlock (lock) != 0)
27
    {
28
      puts ("thread_add_one(): spin_unlock failed");
29
      pthread_exit ((void *) 1l);
30
    }
31
32
  return NULL;
33
}
34
35
static int
36
do_test (void)
37
{
38
  pthread_t thr1, thr2;
39
  pthread_spinlock_t lock;
40
  int tmp;
41
42
  if (pthread_spin_init (&lock, PTHREAD_PROCESS_PRIVATE) != 0)
43
    {
44
      puts ("spin_init failed");
45
      return 1;
46
    }
47
48
  if (pthread_spin_lock (&lock) != 0)
49
    {
50
      puts ("1st spin_lock failed");
51
      return 1;
52
    }
53
54
  if (pthread_create (&thr1, NULL, thread_add_one, (void *) &lock) != 0)
55
    {
56
      puts ("1st pthread_create failed");
57
      return 1;
58
    }
59
60
  if (pthread_create (&thr2, NULL, thread_add_one, (void *) &lock) != 0)
61
    {
62
      puts ("2nd pthread_create failed");
63
      return 1;
64
    }
65
66
  /* sleep 1s before modifying count */
67
  tmp = count;
68
  sleep (1);
69
  count = tmp + 1;
70
71
  if (pthread_spin_unlock (&lock) != 0)
72
    {
73
      puts ("1st spin_unlock failed");
74
      return 1;
75
    }
76
77
  void *status;
78
  if (pthread_join (thr1, &status) != 0)
79
    {
80
      puts ("1st pthread_join failed");
81
      return 1;
82
    }
83
  if (status != NULL)
84
    {
85
      puts ("failure in the 1st thread");
86
      return 1;
87
    }
88
  if (pthread_join (thr2, &status) != 0)
89
    {
90
      puts ("2nd pthread_join failed");
91
      return 1;
92
    }
93
  if (status != NULL)
94
    {
95
      puts ("failure in the 2nd thread");
96
      return 1;
97
    }
98
99
  if (count != 3)
100
    {
101
      printf ("count is %d, should be 3\n", count);
102
      return 1;
103
    }
104
  return 0;
105
}
106
107
#define TIMEOUT 5
108
#define TEST_FUNCTION do_test ()
109
#include "../test-skeleton.c"

Return to bug 16882