blob: b22944c458da3acae238ee67c7523ca28fe2269f [file] [log] [blame]
barteae16322012-08-24 17:57:44 +00001#include <iostream>
2#include <cerrno>
3#include <cstring>
4#include <pthread.h>
5#include <semaphore.h>
6
7struct FailedOn
8{
9 FailedOn(const char *f, int e) : func(f), eno(e) {}
10 std::string func;
11 int eno;
12};
13
14int main(void)
15{
16 try {
17 sem_t mySemaphore;
18 if (sem_init(&mySemaphore, 0, 0) != 0)
19 throw FailedOn("sem_init", errno);
20
21 std::cerr << "Calling sem_trywait\n";
22 if (sem_trywait(&mySemaphore) != 0) {
23 if (errno != EAGAIN)
24 throw FailedOn("sem_trywait", errno);
25
26 std::cerr << "Wait would have blocked" << std::endl;
27 } else {
28 std::cerr << "Wait succeeded" << std::endl;
29 }
30
31 if (sem_destroy(&mySemaphore) != 0)
32 throw FailedOn("sem_destroy", errno);
33
34 return 0;
35 } catch (FailedOn &e) {
36 std::cerr << e.func << " failed: " << strerror(e.eno) << std::endl;
37 } catch (...) {
38 std::cerr << "Unknown exception" << std::endl;
39 }
40
41 return -1;
42}