#include "missing.h"
#include "set.h"
#include "list.h"
+#include "signal-util.h"
#include "sd-event.h"
return e->original_pid != getpid();
}
-static int source_io_unregister(sd_event_source *s) {
+static void source_io_unregister(sd_event_source *s) {
int r;
assert(s);
assert(s->type == SOURCE_IO);
+ if (event_pid_changed(s->event))
+ return;
+
if (!s->io.registered)
- return 0;
+ return;
r = epoll_ctl(s->event->epoll_fd, EPOLL_CTL_DEL, s->io.fd, NULL);
- if (r < 0)
- return -errno;
+ assert_log(r >= 0);
s->io.registered = false;
- return 0;
}
static int source_io_register(
return 0;
}
+/// UNNEEDED by elogind
+#if 0
static clockid_t event_source_type_to_clock(EventSourceType t) {
switch (t) {
return (clockid_t) -1;
}
}
+#endif // 0
static EventSourceType clock_to_event_source_type(clockid_t clock) {
assert(e);
+ if (event_pid_changed(e))
+ return 0;
+
add_to_epoll = e->signal_fd < 0;
r = signalfd(e->signal_fd, &e->sigset, SFD_NONBLOCK|SFD_CLOEXEC);
return 0;
}
+/// UNNEEDED by elogind
+#if 0
_public_ sd_event_source* sd_event_source_ref(sd_event_source *s) {
assert_return(s, NULL);
return s;
}
+#endif // 0
_public_ sd_event_source* sd_event_source_unref(sd_event_source *s) {
return free_and_strdup(&s->description, description);
}
+/// UNNEEDED by elogind
+#if 0
_public_ int sd_event_source_get_description(sd_event_source *s, const char **description) {
assert_return(s, -EINVAL);
assert_return(description, -EINVAL);
*description = s->description;
return 0;
}
+#endif // 0
_public_ sd_event *sd_event_source_get_event(sd_event_source *s) {
assert_return(s, NULL);
return s->event;
}
+/// UNNEEDED by elogind
+#if 0
_public_ int sd_event_source_get_pending(sd_event_source *s) {
assert_return(s, -EINVAL);
assert_return(s->type != SOURCE_EXIT, -EDOM);
return s->io.fd;
}
+#endif // 0
_public_ int sd_event_source_set_io_fd(sd_event_source *s, int fd) {
int r;
return 0;
}
+/// UNNEEDED by elogind
+#if 0
_public_ int sd_event_source_get_io_events(sd_event_source *s, uint32_t* events) {
assert_return(s, -EINVAL);
assert_return(events, -EINVAL);
*events = s->io.events;
return 0;
}
+#endif // 0
_public_ int sd_event_source_set_io_events(sd_event_source *s, uint32_t events) {
int r;
return 0;
}
+/// UNNEEDED by elogind
+#if 0
_public_ int sd_event_source_get_io_revents(sd_event_source *s, uint32_t* revents) {
assert_return(s, -EINVAL);
assert_return(revents, -EINVAL);
return s->priority;
}
+#endif // 0
_public_ int sd_event_source_set_priority(sd_event_source *s, int64_t priority) {
assert_return(s, -EINVAL);
return 0;
}
+/// UNNEEDED by elogind
+#if 0
_public_ int sd_event_source_get_enabled(sd_event_source *s, int *m) {
assert_return(s, -EINVAL);
assert_return(m, -EINVAL);
*m = s->enabled;
return 0;
}
+#endif // 0
_public_ int sd_event_source_set_enabled(sd_event_source *s, int m) {
int r;
switch (s->type) {
case SOURCE_IO:
- r = source_io_unregister(s);
- if (r < 0)
- return r;
-
+ source_io_unregister(s);
s->enabled = m;
break;
return 0;
}
+/// UNNEEDED by elogind
+#if 0
_public_ int sd_event_source_get_time_accuracy(sd_event_source *s, uint64_t *usec) {
assert_return(s, -EINVAL);
assert_return(usec, -EINVAL);
*pid = s->child.pid;
return 0;
}
+#endif // 0
_public_ int sd_event_source_set_prepare(sd_event_source *s, sd_event_handler_t callback) {
int r;
return 0;
}
+/// UNNEEDED by elogind
+#if 0
_public_ void* sd_event_source_get_userdata(sd_event_source *s) {
assert_return(s, NULL);
return ret;
}
+#endif // 0
static usec_t sleep_between(sd_event *e, usec_t a, usec_t b) {
usec_t c;
}
r = -errno;
-
goto finish;
}
assert_return(e->state == SD_EVENT_INITIAL, -EBUSY);
r = sd_event_prepare(e);
- if (r > 0) {
- r = sd_event_dispatch(e);
- if (r < 0)
- return r;
- else
- return 1;
- } else if (r < 0)
- return r;
+ if (r == 0)
+ /* There was nothing? Then wait... */
+ r = sd_event_wait(e, timeout);
- r = sd_event_wait(e, timeout);
if (r > 0) {
+ /* There's something now, then let's dispatch it */
r = sd_event_dispatch(e);
if (r < 0)
return r;
- else
- return 1;
- } else
- return r;
+
+ return 1;
+ }
+
+ return r;
}
+/// UNNEEDED by elogind
+#if 0
_public_ int sd_event_loop(sd_event *e) {
int r;
return e->epoll_fd;
}
+#endif // 0
_public_ int sd_event_get_state(sd_event *e) {
assert_return(e, -EINVAL);
return 0;
}
+/// UNNEEDED by elogind
+#if 0
_public_ int sd_event_now(sd_event *e, clockid_t clock, uint64_t *usec) {
assert_return(e, -EINVAL);
assert_return(usec, -EINVAL);
return 0;
}
+#endif // 0
_public_ int sd_event_default(sd_event **ret) {
return r;
}
+/// UNNEEDED by elogind
+#if 0
_public_ int sd_event_get_watchdog(sd_event *e) {
assert_return(e, -EINVAL);
assert_return(!event_pid_changed(e), -ECHILD);
return e->watchdog;
}
+#endif // 0