~ubuntu-branches/ubuntu/natty/clamav/natty-security

« back to all changes in this revision

Viewing changes to win32/3rdparty/pthreads/tests/semaphore3.c

  • Committer: Bazaar Package Importer
  • Author(s): Scott Kitterman
  • Date: 2011-02-19 09:51:33 UTC
  • mfrom: (0.35.19 sid)
  • Revision ID: james.westby@ubuntu.com-20110219095133-sde2dyj8a6bjbkdh
Tags: 0.97+dfsg-0ubuntu1
* Merge from debian unstable (0ubuntu1 because the Debian upload was
  inadvertently left marked UNRELEASED).  Remaining changes:
  - Drop initial signature definitions from clamav-base
  - Drop build-dep on electric-fence (in Universe)
  - Add apparmor profiles for clamd and freshclam along with maintainer
    script changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * File: semaphore3.c
 
3
 *
 
4
 *
 
5
 * --------------------------------------------------------------------------
 
6
 *
 
7
 *      Pthreads-win32 - POSIX Threads Library for Win32
 
8
 *      Copyright(C) 1998 John E. Bossom
 
9
 *      Copyright(C) 1999,2005 Pthreads-win32 contributors
 
10
 * 
 
11
 *      Contact Email: rpj@callisto.canberra.edu.au
 
12
 * 
 
13
 *      The current list of contributors is contained
 
14
 *      in the file CONTRIBUTORS included with the source
 
15
 *      code distribution. The list can also be seen at the
 
16
 *      following World Wide Web location:
 
17
 *      http://sources.redhat.com/pthreads-win32/contributors.html
 
18
 * 
 
19
 *      This library is free software; you can redistribute it and/or
 
20
 *      modify it under the terms of the GNU Lesser General Public
 
21
 *      License as published by the Free Software Foundation; either
 
22
 *      version 2 of the License, or (at your option) any later version.
 
23
 * 
 
24
 *      This library is distributed in the hope that it will be useful,
 
25
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 
26
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
27
 *      Lesser General Public License for more details.
 
28
 * 
 
29
 *      You should have received a copy of the GNU Lesser General Public
 
30
 *      License along with this library in the file COPYING.LIB;
 
31
 *      if not, write to the Free Software Foundation, Inc.,
 
32
 *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 
33
 *
 
34
 * --------------------------------------------------------------------------
 
35
 *
 
36
 * Test Synopsis: Verify sem_getvalue returns the correct number of waiters.
 
37
 * - 
 
38
 *
 
39
 * Test Method (Validation or Falsification):
 
40
 * - Validation
 
41
 *
 
42
 * Requirements Tested:
 
43
 * - 
 
44
 *
 
45
 * Features Tested:
 
46
 * - 
 
47
 *
 
48
 * Cases Tested:
 
49
 * -
 
50
 *
 
51
 * Description:
 
52
 * -
 
53
 *
 
54
 * Environment:
 
55
 * -
 
56
 *
 
57
 * Input:
 
58
 * - None.
 
59
 *
 
60
 * Output:
 
61
 * - File name, Line number, and failed expression on failure.
 
62
 * - No output on success.
 
63
 *
 
64
 * Assumptions:
 
65
 * -
 
66
 *
 
67
 * Pass Criteria:
 
68
 * - Process returns zero exit status.
 
69
 *
 
70
 * Fail Criteria:
 
71
 * - Process returns non-zero exit status.
 
72
 */
 
73
 
 
74
#include "test.h"
 
75
 
 
76
#define MAX_COUNT 100
 
77
 
 
78
sem_t s;
 
79
 
 
80
void *
 
81
thr (void * arg)
 
82
{
 
83
  assert(sem_wait(&s) == 0);
 
84
  assert(pthread_detach(pthread_self()) == 0);
 
85
  return NULL;
 
86
}
 
87
 
 
88
int
 
89
main()
 
90
{
 
91
        int value = 0;
 
92
        int i;
 
93
        pthread_t t[MAX_COUNT+1];
 
94
 
 
95
        assert(sem_init(&s, PTHREAD_PROCESS_PRIVATE, 0) == 0);
 
96
        assert(sem_getvalue(&s, &value) == 0);
 
97
//      printf("Value = %d\n", value);  fflush(stdout);
 
98
        assert(value == 0);
 
99
 
 
100
        for (i = 1; i <= MAX_COUNT; i++)
 
101
                {
 
102
                        assert(pthread_create(&t[i], NULL, thr, NULL) == 0);
 
103
                        do {
 
104
                          sched_yield();
 
105
                          assert(sem_getvalue(&s, &value) == 0);
 
106
                        } while (value != -i);
 
107
//                      printf("Value = %d\n", value); fflush(stdout);
 
108
                        assert(-value == i);
 
109
                }
 
110
 
 
111
        for (i = MAX_COUNT - 1; i >= 0; i--)
 
112
                {
 
113
                        assert(sem_post(&s) == 0);
 
114
                        assert(sem_getvalue(&s, &value) == 0);
 
115
//                      printf("Value = %d\n", value);  fflush(stdout);
 
116
                        assert(-value == i);
 
117
                }
 
118
 
 
119
  return 0;
 
120
}
 
121