this repo has no description
at fixPythonPipStalling 42 lines 873 B view raw
1#ifndef DISPATCH_WIN_POSIX_SEMAPHORE_ 2#define DISPATCH_WIN_POSIX_SEMAPHORE_ 3 4typedef HANDLE sem_t; 5 6static 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 13static inline int sem_destroy(sem_t* s) 14{ 15 return CloseHandle(s) != 1; 16} 17 18static inline int sem_post(sem_t* s) 19{ 20 return !ReleaseSemaphore(s, 1, 0); 21} 22 23static inline int sem_wait(sem_t* s) 24{ 25 return WaitForSingleObject(s, INFINITE) == WAIT_FAILED; 26} 27 28static int sem_timedwait(sem_t * sem, const struct timespec * timeout) 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 } 40} 41 42#endif /* DISPATCH_WIN_POSIX_SEMAPHORE_ */