1 typedef struct {
2     PyObject_HEAD
3     key_t key;
4     int id;
5     short op_flags;
6 } Semaphore;
7 
8 
9 /* Object methods */
10 PyObject *Semaphore_new(PyTypeObject *type, PyObject *, PyObject *);
11 int Semaphore_init(Semaphore *, PyObject *, PyObject *);
12 void Semaphore_dealloc(Semaphore *);
13 PyObject *Semaphore_enter(Semaphore *);
14 PyObject *Semaphore_exit(Semaphore *, PyObject *);
15 PyObject *Semaphore_P(Semaphore *, PyObject *, PyObject *);
16 PyObject *Semaphore_acquire(Semaphore *, PyObject *, PyObject *);
17 PyObject *Semaphore_V(Semaphore *, PyObject *, PyObject *);
18 PyObject *Semaphore_release(Semaphore *, PyObject *, PyObject *);
19 PyObject *Semaphore_Z(Semaphore *, PyObject *, PyObject *);
20 PyObject *Semaphore_remove(Semaphore *);
21 
22 /* Object attributes (read-write & read-only) */
23 PyObject *sem_get_value(Semaphore *);
24 int sem_set_value(Semaphore *self, PyObject *py_value);
25 
26 PyObject *sem_get_block(Semaphore *);
27 int sem_set_block(Semaphore *self, PyObject *py_value);
28 
29 PyObject *sem_get_mode(Semaphore *);
30 int sem_set_mode(Semaphore *, PyObject *);
31 
32 PyObject *sem_get_undo(Semaphore *);
33 int sem_set_undo(Semaphore *self, PyObject *py_value);
34 
35 PyObject *sem_get_uid(Semaphore *);
36 int sem_set_uid(Semaphore *, PyObject *);
37 
38 PyObject *sem_get_gid(Semaphore *);
39 int sem_set_gid(Semaphore *, PyObject *);
40 
41 PyObject *sem_get_key(Semaphore *);
42 PyObject *sem_get_c_uid(Semaphore *);
43 PyObject *sem_get_c_gid(Semaphore *);
44 PyObject *sem_get_last_pid(Semaphore *);
45 PyObject *sem_get_waiting_for_nonzero(Semaphore *);
46 PyObject *sem_get_waiting_for_zero(Semaphore *);
47 PyObject *sem_get_o_time(Semaphore *);
48 
49 PyObject *sem_str(Semaphore *);
50 PyObject *sem_repr(Semaphore *);
51 
52 /* Utility functions */
53 PyObject *sem_remove(int);
54