summaryrefslogtreecommitdiffstats
path: root/src/shared/signal.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/signal.h')
-rw-r--r--src/shared/signal.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/shared/signal.h b/src/shared/signal.h
new file mode 100644
index 0000000..0e2f85f
--- /dev/null
+++ b/src/shared/signal.h
@@ -0,0 +1,49 @@
+#ifndef _SIGNAL_H_
+#define _SIGNAL_H_
+
+#define SIGNAL_OK (0)
+#define SIGNAL_TIMEOUT (-2)
+#define SIGNAL_ERROR (-1)
+
+/**
+ * Create a new signal fd (eventfd), nonblocking.
+ * @return >= 0 on success, which is the fd; < 0 on error
+ */
+int signal_new();
+
+/**
+ * Create a new signal fd (eventfd), blocking.
+ * @return >= 0 on success, which is the fd; < 0 on error
+ */
+int signal_newBlocking();
+
+/**
+ * Trigger the given signal, so a wait or clear call will succeed.
+ * @return SIGNAL_OK on success, SIGNAL_ERROR on error
+ */
+int signal_call(int signalFd);
+
+/**
+ * Wait for given signal, with an optional timeout.
+ * If timeout == 0, just poll once.
+ * If timeout < 0, wait forever.
+ * @return > 0 telling how many times the signal was called,
+ * SIGNAL_TIMEOUT if the timeout was reached,
+ * SIGNAL_ERROR if some error occured
+ */
+int signal_wait(int signalFd, int timeoutMs);
+
+/**
+ * Clears any pending signals on this signal fd.
+ * @return number of signals that were pending,
+ * SIGNAL_ERROR if some error occured
+ */
+int signal_clear(int signalFd);
+
+/**
+ * Close the given signal.
+ */
+void signal_close(int signalFd);
+
+#endif
+