chiark / gitweb /
sd-event: don't touch fd's accross forks
[elogind.git] / src / libelogind / sd-event / sd-event.c
index cc8bc50..2b8d1b8 100644 (file)
@@ -474,6 +474,9 @@ static int source_io_unregister(sd_event_source *s) {
         assert(s);
         assert(s->type == SOURCE_IO);
 
         assert(s);
         assert(s->type == SOURCE_IO);
 
+        if (event_pid_changed(s->event))
+                return 0;
+
         if (!s->io.registered)
                 return 0;
 
         if (!s->io.registered)
                 return 0;
 
@@ -604,6 +607,9 @@ static int event_update_signal_fd(sd_event *e) {
 
         assert(e);
 
 
         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);
         add_to_epoll = e->signal_fd < 0;
 
         r = signalfd(e->signal_fd, &e->sigset, SFD_NONBLOCK|SFD_CLOEXEC);