]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-event: assign pid to event source at last also in sd_event_add_child_pidfd()
authorMike Yuan <me@yhndnzj.com>
Sat, 11 Jan 2025 22:45:15 +0000 (23:45 +0100)
committerMike Yuan <me@yhndnzj.com>
Sat, 11 Jan 2025 22:47:52 +0000 (23:47 +0100)
I.e. apply 54988a27b9d1487e1690f94b79031ef61edd6651 to
sd_event_add_child_pidfd() too.

src/libsystemd/sd-event/sd-event.c

index c1f1747fd062202c87f0e588c1bd5aec72d44c65..563b7626fb8b4b4100cde8b74389035d66a16e20 100644 (file)
@@ -1727,17 +1727,12 @@ _public_ int sd_event_add_child_pidfd(
 
         s->wakeup = WAKEUP_EVENT_SOURCE;
         s->child.pidfd = pidfd;
-        s->child.pid = pid;
         s->child.options = options;
         s->child.callback = callback;
         s->child.pidfd_owned = false; /* If we got the pidfd passed in we don't own it by default (similar to the IO fd case) */
         s->userdata = userdata;
         s->enabled = SD_EVENT_ONESHOT;
 
-        r = hashmap_put(e->child_sources, PID_TO_PTR(pid), s);
-        if (r < 0)
-                return r;
-
         if (EVENT_SOURCE_WATCH_PIDFD(s)) {
                 /* We only want to watch for WEXITED */
                 r = source_child_pidfd_register(s, s->enabled);
@@ -1752,6 +1747,11 @@ _public_ int sd_event_add_child_pidfd(
                 e->need_process_child = true;
         }
 
+        r = hashmap_put(e->child_sources, PID_TO_PTR(pid), s);
+        if (r < 0)
+                return r;
+
+        s->child.pid = pid;
         e->n_online_child_sources++;
 
         if (ret)