Tizen 2.1 base
[platform/upstream/gcd.git] / pthread_workqueue-0.8.2 / testing / api / posix_semaphore.h
1 #ifndef DISPATCH_WIN_POSIX_SEMAPHORE_\r
2 #define DISPATCH_WIN_POSIX_SEMAPHORE_\r
3 \r
4 typedef HANDLE sem_t;
5
6 static int sem_init(sem_t * sem, int shared, unsigned int val)
7 {
8         *sem = CreateSemaphore(0, val, 1, 0);
9         // TODO: Proper error handling
10         return *sem == 0;
11 }
12
13 static inline int sem_destroy(sem_t* s)
14 {
15         return CloseHandle(s) != 1;
16 }
17
18 static inline int sem_post(sem_t* s)
19 {
20         return !ReleaseSemaphore(s, 1, 0);
21 }
22
23 static inline int sem_wait(sem_t* s)
24 {
25         return WaitForSingleObject(s, INFINITE) == WAIT_FAILED;
26 }
27 \r
28 static int sem_timedwait(sem_t * sem, const struct timespec * timeout)\r
29 {
30         DWORD duration = (DWORD)(timeout->tv_nsec / 1000000) + (DWORD)(timeout->tv_sec * 1000);
31
32         switch(WaitForSingleObject(sem,duration) ){
33         case WAIT_TIMEOUT:
34                 return ETIMEDOUT;
35         case WAIT_FAILED:
36                 return EINVAL;
37         default:
38                 return 0;
39         }\r
40 }\r
41 \r
42 #endif /* DISPATCH_WIN_POSIX_SEMAPHORE_ */\r