Lely core libraries 2.3.4
sigset.h
Go to the documentation of this file.
1
22#ifndef LELY_IO2_SIGSET_H_
23#define LELY_IO2_SIGSET_H_
24
25#include <lely/ev/future.h>
26#include <lely/ev/task.h>
27#include <lely/io2/dev.h>
28
29#include <signal.h>
30
31#if _WIN32 && !defined(SIGHUP)
32#define SIGHUP 1
33#endif
34
35#ifndef LELY_IO_SIGSET_INLINE
36#define LELY_IO_SIGSET_INLINE static inline
37#endif
38
40typedef const struct io_sigset_vtbl *const io_sigset_t;
41
48 struct ev_task task;
50 int signo;
51};
52
54#define IO_SIGSET_WAIT_INIT(exec, func) \
55 { \
56 EV_TASK_INIT(exec, func), 0 \
57 }
58
59#ifdef __cplusplus
60extern "C" {
61#endif
62
64 io_dev_t *(*get_dev)(const io_sigset_t *sigset);
65 int (*clear)(io_sigset_t *sigset);
66 int (*insert)(io_sigset_t *sigset, int signo);
67 int (*remove)(io_sigset_t *sigset, int signo);
68 void (*submit_wait)(io_sigset_t *sigset, struct io_sigset_wait *wait);
69};
70
72static inline io_ctx_t *io_sigset_get_ctx(const io_sigset_t *sigset);
73
75static inline ev_exec_t *io_sigset_get_exec(const io_sigset_t *sigset);
76
78static inline size_t io_sigset_cancel(
79 io_sigset_t *sigset, struct ev_task *task);
80
82static inline size_t io_sigset_abort(io_sigset_t *sigset, struct ev_task *task);
83
87LELY_IO_SIGSET_INLINE io_dev_t *io_sigset_get_dev(const io_sigset_t *sigset);
88
97LELY_IO_SIGSET_INLINE int io_sigset_clear(io_sigset_t *sigset);
98
108LELY_IO_SIGSET_INLINE int io_sigset_insert(io_sigset_t *sigset, int signo);
109
119LELY_IO_SIGSET_INLINE int io_sigset_remove(io_sigset_t *sigset, int signo);
120
125LELY_IO_SIGSET_INLINE void io_sigset_submit_wait(
126 io_sigset_t *sigset, struct io_sigset_wait *wait);
127
136static inline size_t io_sigset_cancel_wait(
137 io_sigset_t *sigset, struct io_sigset_wait *wait);
138
147static inline size_t io_sigset_abort_wait(
148 io_sigset_t *sigset, struct io_sigset_wait *wait);
149
167 struct io_sigset_wait **pwait);
173
174static inline io_ctx_t *
176{
177 return io_dev_get_ctx(io_sigset_get_dev(sigset));
178}
179
180static inline ev_exec_t *
182{
183 return io_dev_get_exec(io_sigset_get_dev(sigset));
184}
185
186static inline size_t
188{
189 return io_dev_cancel(io_sigset_get_dev(sigset), task);
190}
191
192static inline size_t
194{
195 return io_dev_abort(io_sigset_get_dev(sigset), task);
196}
197
198inline io_dev_t *
200{
201 return (*sigset)->get_dev(sigset);
202}
203
204inline int
206{
207 return (*sigset)->clear(sigset);
208}
209
210inline int
212{
213 return (*sigset)->insert(sigset, signo);
214}
215
216inline int
218{
219 return (*sigset)->remove(sigset, signo);
220}
221
222inline void
224{
225 (*sigset)->submit_wait(sigset, wait);
226}
227
228static inline size_t
230{
231 return io_sigset_cancel(sigset, &wait->task);
232}
233
234static inline size_t
236{
237 return io_sigset_abort(sigset, &wait->task);
238}
239
240#ifdef __cplusplus
241}
242#endif
243
244#endif // !LELY_IO2_SIGSET_H_
This header file is part of the event library; it contains the futures and promises declarations.
const struct ev_exec_vtbl *const ev_exec_t
An abstract task executor.
Definition ev.h:29
int io_sigset_insert(io_sigset_t *sigset, int signo)
Insert the specified signal number into the set of signals being monitored by a signal handler.
Definition sigset.h:211
const struct io_sigset_vtbl *const io_sigset_t
An abstract signal handler.
Definition sigset.h:40
static size_t io_sigset_abort(io_sigset_t *sigset, struct ev_task *task)
Definition sigset.h:193
void io_sigset_submit_wait(io_sigset_t *sigset, struct io_sigset_wait *wait)
Submits a wait operation to a signal handler.
Definition sigset.h:223
int io_sigset_remove(io_sigset_t *sigset, int signo)
Removes the specified signal number from the set of signals being monitored by a signal handler.
Definition sigset.h:217
static size_t io_sigset_abort_wait(io_sigset_t *sigset, struct io_sigset_wait *wait)
Aborts the specified signal wait operation if it is pending.
Definition sigset.h:235
int io_sigset_clear(io_sigset_t *sigset)
Clears the set of signals being monitored by a signal handler.
Definition sigset.h:205
static ev_exec_t * io_sigset_get_exec(const io_sigset_t *sigset)
Definition sigset.h:181
static size_t io_sigset_cancel(io_sigset_t *sigset, struct ev_task *task)
Definition sigset.h:187
struct io_sigset_wait * io_sigset_wait_from_task(struct ev_task *task)
Obtains a pointer to a signal wait operation from a pointer to its completion task.
Definition sigset.c:62
io_dev_t * io_sigset_get_dev(const io_sigset_t *sigset)
Returns a pointer to the abstract I/O device representing the signal handler.
Definition sigset.h:199
static size_t io_sigset_cancel_wait(io_sigset_t *sigset, struct io_sigset_wait *wait)
Cancels the specified signal wait operation if it is pending.
Definition sigset.h:229
static io_ctx_t * io_sigset_get_ctx(const io_sigset_t *sigset)
Definition sigset.h:175
This header file is part of the I/O library; it contains the abstract I/O device interface.
size_t io_dev_abort(io_dev_t *dev, struct ev_task *task)
Aborts the asynchronous operation submitted to *dev, if its task has not yet been submitted to its ex...
Definition dev.h:98
const struct io_dev_vtbl *const io_dev_t
An abstract I/O device.
Definition dev.h:35
io_ctx_t * io_dev_get_ctx(const io_dev_t *dev)
Returns a pointer to the I/O context with which the I/O device is registered.
Definition dev.h:80
size_t io_dev_cancel(io_dev_t *dev, struct ev_task *task)
Cancels the asynchronous operation submitted to *dev, if its task has not yet been submitted to its e...
Definition dev.h:92
ev_exec_t * io_dev_get_exec(const io_dev_t *dev)
Returns a pointer to the executor used by the I/O device to execute asynchronous tasks.
Definition dev.h:86
A future.
Definition future.c:66
An executable task.
Definition task.h:41
Definition ctx.c:38
A wait operation suitable for use with a signal handler.
Definition sigset.h:43
struct ev_task task
The task (to be) submitted upon completion (or cancellation) of the wait operation.
Definition sigset.h:48
int signo
The signal number, or 0 if the wait operation was canceled.
Definition sigset.h:50
This header file is part of the event library; it contains the task declarations.