chiark / gitweb /
when resetting signal handlers, set them to SA_RESTART
[elogind.git] / manager.c
index b3123f2b1d2d57ac29f02b55acac9cec704a42af..cd97e67da57e5a15e49e17806e320c464d4c7662 100644 (file)
--- a/manager.c
+++ b/manager.c
@@ -15,6 +15,7 @@
 #include "macro.h"
 #include "strv.h"
 #include "log.h"
+#include "util.h"
 
 Manager* manager_new(void) {
         Manager *m;
@@ -41,6 +42,8 @@ Manager* manager_new(void) {
         if ((m->epoll_fd = epoll_create1(EPOLL_CLOEXEC)) < 0)
                 goto fail;
 
+        assert_se(reset_all_signal_handlers() == 0);
+
         assert_se(sigemptyset(&mask) == 0);
         assert_se(sigaddset(&mask, SIGCHLD) == 0);
         assert_se(sigaddset(&mask, SIGINT) == 0);
@@ -1081,12 +1084,12 @@ int manager_loop(Manager *m) {
         assert(m);
 
         for (;;) {
-                struct epoll_event events[32];
-                int n, i;
+                struct epoll_event event;
+                int n;
 
                 manager_dispatch_run_queue(m);
 
-                if ((n = epoll_wait(m->epoll_fd, events, ELEMENTSOF(events), -1)) < 0) {
+                if ((n = epoll_wait(m->epoll_fd, &event, 1, -1)) < 0) {
 
                         if (errno == -EINTR)
                                 continue;
@@ -1094,12 +1097,12 @@ int manager_loop(Manager *m) {
                         return -errno;
                 }
 
-                for (i = 0; i < n; i++) {
-                        if ((r = process_event(m, events + i, &quit)) < 0)
-                                return r;
+                assert(n == 1);
 
-                        if (quit)
-                                return 0;
-                }
+                if ((r = process_event(m, &event, &quit)) < 0)
+                        return r;
+
+                if (quit)
+                        return 0;
         }
 }