]> git.proxmox.com Git - systemd.git/blame - src/systemd/sd-event.h
Imported Upstream version 220
[systemd.git] / src / systemd / sd-event.h
CommitLineData
60f067b4
JS
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#ifndef foosdeventhfoo
4#define foosdeventhfoo
5
6/***
7 This file is part of systemd.
8
9 Copyright 2013 Lennart Poettering
10
11 systemd is free software; you can redistribute it and/or modify it
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
14 (at your option) any later version.
15
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 Lesser General Public License for more details.
20
21 You should have received a copy of the GNU Lesser General Public License
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23***/
24
25#include <sys/types.h>
26#include <sys/signalfd.h>
27#include <sys/epoll.h>
28#include <inttypes.h>
29#include <signal.h>
30
31#include "_sd-common.h"
32
33/*
34 Why is this better than pure epoll?
35
36 - Supports event source prioritization
37 - Scales better with a large number of time events because it does not require one timerfd each
38 - Automatically tries to coalesce timer events system-wide
39 - Handles signals and child PIDs
40*/
41
42_SD_BEGIN_DECLARATIONS;
43
44typedef struct sd_event sd_event;
45typedef struct sd_event_source sd_event_source;
46
47enum {
48 SD_EVENT_OFF = 0,
49 SD_EVENT_ON = 1,
50 SD_EVENT_ONESHOT = -1
51};
52
53enum {
e3bff60a
MP
54 SD_EVENT_INITIAL,
55 SD_EVENT_ARMED,
5eef597e 56 SD_EVENT_PENDING,
60f067b4
JS
57 SD_EVENT_RUNNING,
58 SD_EVENT_EXITING,
59 SD_EVENT_FINISHED
60};
61
62enum {
63 /* And everything in-between and outside is good too */
64 SD_EVENT_PRIORITY_IMPORTANT = -100,
65 SD_EVENT_PRIORITY_NORMAL = 0,
66 SD_EVENT_PRIORITY_IDLE = 100
67};
68
69typedef int (*sd_event_handler_t)(sd_event_source *s, void *userdata);
70typedef int (*sd_event_io_handler_t)(sd_event_source *s, int fd, uint32_t revents, void *userdata);
71typedef int (*sd_event_time_handler_t)(sd_event_source *s, uint64_t usec, void *userdata);
72typedef int (*sd_event_signal_handler_t)(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata);
73typedef int (*sd_event_child_handler_t)(sd_event_source *s, const siginfo_t *si, void *userdata);
74
75int sd_event_default(sd_event **e);
76
77int sd_event_new(sd_event **e);
78sd_event* sd_event_ref(sd_event *e);
79sd_event* sd_event_unref(sd_event *e);
80
81int sd_event_add_io(sd_event *e, sd_event_source **s, int fd, uint32_t events, sd_event_io_handler_t callback, void *userdata);
82int 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);
83int sd_event_add_signal(sd_event *e, sd_event_source **s, int sig, sd_event_signal_handler_t callback, void *userdata);
84int sd_event_add_child(sd_event *e, sd_event_source **s, pid_t pid, int options, sd_event_child_handler_t callback, void *userdata);
85int sd_event_add_defer(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
86int sd_event_add_post(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
87int sd_event_add_exit(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
88
5eef597e
MP
89int sd_event_prepare(sd_event *e);
90int sd_event_wait(sd_event *e, uint64_t timeout);
91int sd_event_dispatch(sd_event *e);
60f067b4
JS
92int sd_event_run(sd_event *e, uint64_t timeout);
93int sd_event_loop(sd_event *e);
94int sd_event_exit(sd_event *e, int code);
95
96int sd_event_now(sd_event *e, clockid_t clock, uint64_t *usec);
97
5eef597e 98int sd_event_get_fd(sd_event *e);
60f067b4
JS
99int sd_event_get_state(sd_event *e);
100int sd_event_get_tid(sd_event *e, pid_t *tid);
101int sd_event_get_exit_code(sd_event *e, int *code);
102int sd_event_set_watchdog(sd_event *e, int b);
103int sd_event_get_watchdog(sd_event *e);
104
105sd_event_source* sd_event_source_ref(sd_event_source *s);
106sd_event_source* sd_event_source_unref(sd_event_source *s);
107
108sd_event *sd_event_source_get_event(sd_event_source *s);
109void* sd_event_source_get_userdata(sd_event_source *s);
110void* sd_event_source_set_userdata(sd_event_source *s, void *userdata);
111
f47781d8
MP
112int sd_event_source_set_description(sd_event_source *s, const char *description);
113int sd_event_source_get_description(sd_event_source *s, const char **description);
60f067b4
JS
114int sd_event_source_set_prepare(sd_event_source *s, sd_event_handler_t callback);
115int sd_event_source_get_pending(sd_event_source *s);
116int sd_event_source_get_priority(sd_event_source *s, int64_t *priority);
117int sd_event_source_set_priority(sd_event_source *s, int64_t priority);
118int sd_event_source_get_enabled(sd_event_source *s, int *enabled);
119int sd_event_source_set_enabled(sd_event_source *s, int enabled);
120int sd_event_source_get_io_fd(sd_event_source *s);
121int sd_event_source_set_io_fd(sd_event_source *s, int fd);
122int sd_event_source_get_io_events(sd_event_source *s, uint32_t* events);
123int sd_event_source_set_io_events(sd_event_source *s, uint32_t events);
124int sd_event_source_get_io_revents(sd_event_source *s, uint32_t* revents);
125int sd_event_source_get_time(sd_event_source *s, uint64_t *usec);
126int sd_event_source_set_time(sd_event_source *s, uint64_t usec);
127int sd_event_source_get_time_accuracy(sd_event_source *s, uint64_t *usec);
128int sd_event_source_set_time_accuracy(sd_event_source *s, uint64_t usec);
129int sd_event_source_get_time_clock(sd_event_source *s, clockid_t *clock);
130int sd_event_source_get_signal(sd_event_source *s);
131int sd_event_source_get_child_pid(sd_event_source *s, pid_t *pid);
132
133_SD_END_DECLARATIONS;
134
135#endif