]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-event.h
tree-wide: remove Lennart's copyright lines
[thirdparty/systemd.git] / src / systemd / sd-event.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
fd38203a
LP
2#ifndef foosdeventhfoo
3#define foosdeventhfoo
4
5/***
fd38203a
LP
6
7 systemd is free software; you can redistribute it and/or modify it
8 under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 2.1 of the License, or
10 (at your option) any later version.
11
12 systemd is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public License
18 along with systemd; If not, see <http://www.gnu.org/licenses/>.
19***/
20
fd38203a
LP
21#include <inttypes.h>
22#include <signal.h>
71d35b6b 23#include <sys/epoll.h>
97ef5391 24#include <sys/inotify.h>
71d35b6b
TA
25#include <sys/signalfd.h>
26#include <sys/types.h>
2b97a957 27#include <time.h>
fd38203a 28
0095c454
LP
29#include "_sd-common.h"
30
fd38203a
LP
31/*
32 Why is this better than pure epoll?
33
10b17992
JSJ
34 - Supports event source prioritization
35 - Scales better with a large number of time events because it does not require one timerfd each
eaa3cbef 36 - Automatically tries to coalesce timer events system-wide
fd38203a 37 - Handles signals and child PIDs
fd38203a
LP
38*/
39
0095c454 40_SD_BEGIN_DECLARATIONS;
6695ed7a 41
b937d761
NM
42#define SD_EVENT_DEFAULT ((sd_event *) 1)
43
fd38203a
LP
44typedef struct sd_event sd_event;
45typedef struct sd_event_source sd_event_source;
46
da7e457c 47enum {
baf76283
LP
48 SD_EVENT_OFF = 0,
49 SD_EVENT_ON = 1,
fd38203a 50 SD_EVENT_ONESHOT = -1
da7e457c
LP
51};
52
53enum {
2b0c9ef7
TG
54 SD_EVENT_INITIAL,
55 SD_EVENT_ARMED,
c45a5a74 56 SD_EVENT_PENDING,
da7e457c 57 SD_EVENT_RUNNING,
6203e07a 58 SD_EVENT_EXITING,
0be6c2f6 59 SD_EVENT_FINISHED,
e0c0b07d 60 SD_EVENT_PREPARING
da7e457c 61};
fd38203a 62
6ee69bab 63enum {
10b17992 64 /* And everything in-between and outside is good too */
718db961
LP
65 SD_EVENT_PRIORITY_IMPORTANT = -100,
66 SD_EVENT_PRIORITY_NORMAL = 0,
67 SD_EVENT_PRIORITY_IDLE = 100
6ee69bab
LP
68};
69
718db961
LP
70typedef int (*sd_event_handler_t)(sd_event_source *s, void *userdata);
71typedef int (*sd_event_io_handler_t)(sd_event_source *s, int fd, uint32_t revents, void *userdata);
72typedef int (*sd_event_time_handler_t)(sd_event_source *s, uint64_t usec, void *userdata);
73typedef int (*sd_event_signal_handler_t)(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata);
2797366c 74#if defined _GNU_SOURCE || _POSIX_C_SOURCE >= 199309L
718db961 75typedef int (*sd_event_child_handler_t)(sd_event_source *s, const siginfo_t *si, void *userdata);
b2542bf9
ZJS
76#else
77typedef void* sd_event_child_handler_t;
78#endif
97ef5391 79typedef int (*sd_event_inotify_handler_t)(sd_event_source *s, const struct inotify_event *event, void *userdata);
15723a1d 80typedef void (*sd_event_destroy_t)(void *userdata);
fd38203a 81
afc6adb5
LP
82int sd_event_default(sd_event **e);
83
fd38203a
LP
84int sd_event_new(sd_event **e);
85sd_event* sd_event_ref(sd_event *e);
86sd_event* sd_event_unref(sd_event *e);
87
151b9b96 88int sd_event_add_io(sd_event *e, sd_event_source **s, int fd, uint32_t events, sd_event_io_handler_t callback, void *userdata);
6a0f1f6d 89int sd_event_add_time(sd_event *e, sd_event_source **s, clockid_t clock, uint64_t usec, uint64_t accuracy, sd_event_time_handler_t callback, void *userdata);
151b9b96
LP
90int sd_event_add_signal(sd_event *e, sd_event_source **s, int sig, sd_event_signal_handler_t callback, void *userdata);
91int sd_event_add_child(sd_event *e, sd_event_source **s, pid_t pid, int options, sd_event_child_handler_t callback, void *userdata);
97ef5391 92int sd_event_add_inotify(sd_event *e, sd_event_source **s, const char *path, uint32_t mask, sd_event_inotify_handler_t callback, void *userdata);
151b9b96 93int sd_event_add_defer(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
6e9feda3 94int sd_event_add_post(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
151b9b96 95int sd_event_add_exit(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
fd38203a 96
c45a5a74 97int sd_event_prepare(sd_event *e);
0be6c2f6 98int sd_event_wait(sd_event *e, uint64_t usec);
c45a5a74 99int sd_event_dispatch(sd_event *e);
0be6c2f6 100int sd_event_run(sd_event *e, uint64_t usec);
fd38203a 101int sd_event_loop(sd_event *e);
6203e07a 102int sd_event_exit(sd_event *e, int code);
fd38203a 103
6a0f1f6d
LP
104int sd_event_now(sd_event *e, clockid_t clock, uint64_t *usec);
105
9b364545 106int sd_event_get_fd(sd_event *e);
da7e457c 107int sd_event_get_state(sd_event *e);
afc6adb5 108int sd_event_get_tid(sd_event *e, pid_t *tid);
6203e07a 109int sd_event_get_exit_code(sd_event *e, int *code);
cde93897 110int sd_event_set_watchdog(sd_event *e, int b);
8f726607 111int sd_event_get_watchdog(sd_event *e);
60a3b1e1 112int sd_event_get_iteration(sd_event *e, uint64_t *ret);
fd38203a
LP
113
114sd_event_source* sd_event_source_ref(sd_event_source *s);
115sd_event_source* sd_event_source_unref(sd_event_source *s);
116
9a78148e
LP
117sd_event *sd_event_source_get_event(sd_event_source *s);
118void* sd_event_source_get_userdata(sd_event_source *s);
119void* sd_event_source_set_userdata(sd_event_source *s, void *userdata);
120
356779df
LP
121int sd_event_source_set_description(sd_event_source *s, const char *description);
122int sd_event_source_get_description(sd_event_source *s, const char **description);
718db961 123int sd_event_source_set_prepare(sd_event_source *s, sd_event_handler_t callback);
fd38203a 124int sd_event_source_get_pending(sd_event_source *s);
31927c16
LP
125int sd_event_source_get_priority(sd_event_source *s, int64_t *priority);
126int sd_event_source_set_priority(sd_event_source *s, int64_t priority);
baf76283
LP
127int sd_event_source_get_enabled(sd_event_source *s, int *enabled);
128int sd_event_source_set_enabled(sd_event_source *s, int enabled);
305f78bf 129int sd_event_source_get_io_fd(sd_event_source *s);
30caf8f3 130int sd_event_source_set_io_fd(sd_event_source *s, int fd);
ab93297c
NM
131int sd_event_source_get_io_fd_own(sd_event_source *s);
132int sd_event_source_set_io_fd_own(sd_event_source *s, int own);
305f78bf
LP
133int sd_event_source_get_io_events(sd_event_source *s, uint32_t* events);
134int sd_event_source_set_io_events(sd_event_source *s, uint32_t events);
135int sd_event_source_get_io_revents(sd_event_source *s, uint32_t* revents);
fd38203a
LP
136int sd_event_source_get_time(sd_event_source *s, uint64_t *usec);
137int sd_event_source_set_time(sd_event_source *s, uint64_t usec);
c2ba3ad6 138int sd_event_source_get_time_accuracy(sd_event_source *s, uint64_t *usec);
b408026b 139int sd_event_source_set_time_accuracy(sd_event_source *s, uint64_t usec);
6a0f1f6d 140int sd_event_source_get_time_clock(sd_event_source *s, clockid_t *clock);
305f78bf 141int sd_event_source_get_signal(sd_event_source *s);
4bee8012 142int sd_event_source_get_child_pid(sd_event_source *s, pid_t *pid);
97ef5391 143int sd_event_source_get_inotify_mask(sd_event_source *s, uint32_t *ret);
15723a1d
LP
144int sd_event_source_set_destroy_callback(sd_event_source *s, sd_event_destroy_t callback);
145int sd_event_source_get_destroy_callback(sd_event_source *s, sd_event_destroy_t *ret);
fd38203a 146
4afd3348
LP
147/* Define helpers so that __attribute__((cleanup(sd_event_unrefp))) and similar may be used. */
148_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_event, sd_event_unref);
149_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_event_source, sd_event_source_unref);
150
0095c454 151_SD_END_DECLARATIONS;
6695ed7a 152
fd38203a 153#endif