]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journal/kmsg: modernize server_open_dev_kmsg()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 14 Apr 2025 19:46:58 +0000 (04:46 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 14 Apr 2025 21:18:52 +0000 (06:18 +0900)
Let's assign fd and event source only on success.

src/journal/journald-kmsg.c

index 8c3277ae644500d6ac48a4d9e42e9874cc908562..cae91cfb72a3c3c159781375bdd3ce4f74a19af9 100644 (file)
@@ -381,38 +381,35 @@ int server_open_dev_kmsg(Server *s) {
         int r;
 
         assert(s);
+        assert(s->dev_kmsg_fd < 0);
+        assert(!s->dev_kmsg_event_source);
 
-        mode_t mode = O_CLOEXEC|O_NONBLOCK|O_NOCTTY|
-                (s->read_kmsg ? O_RDWR : O_WRONLY);
+        mode_t mode = O_CLOEXEC|O_NONBLOCK|O_NOCTTY|(s->read_kmsg ? O_RDWR : O_WRONLY);
 
-        s->dev_kmsg_fd = open("/dev/kmsg", mode);
-        if (s->dev_kmsg_fd < 0) {
+        _cleanup_close_ int fd = open("/dev/kmsg", mode);
+        if (fd < 0) {
                 log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING,
                                errno, "Failed to open /dev/kmsg for %s access, ignoring: %m", accmode_to_string(mode));
                 return 0;
         }
 
-        if (!s->read_kmsg)
+        if (!s->read_kmsg) {
+                s->dev_kmsg_fd = TAKE_FD(fd);
                 return 0;
-
-        r = sd_event_add_io(s->event, &s->dev_kmsg_event_source, s->dev_kmsg_fd, EPOLLIN, dispatch_dev_kmsg, s);
-        if (r < 0) {
-                log_error_errno(r, "Failed to add /dev/kmsg fd to event loop: %m");
-                goto finish;
         }
 
-        r = sd_event_source_set_priority(s->dev_kmsg_event_source, SD_EVENT_PRIORITY_IMPORTANT+10);
-        if (r < 0) {
-                log_error_errno(r, "Failed to adjust priority of kmsg event source: %m");
-                goto finish;
-        }
+        _cleanup_(sd_event_source_unrefp) sd_event_source *es = NULL;
+        r = sd_event_add_io(s->event, &es, fd, EPOLLIN, dispatch_dev_kmsg, s);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add /dev/kmsg fd to event loop: %m");
 
-        return 0;
+        r = sd_event_source_set_priority(es, SD_EVENT_PRIORITY_IMPORTANT+10);
+        if (r < 0)
+                return log_error_errno(r, "Failed to adjust priority of kmsg event source: %m");
 
-finish:
-        s->dev_kmsg_event_source = sd_event_source_unref(s->dev_kmsg_event_source);
-        s->dev_kmsg_fd = safe_close(s->dev_kmsg_fd);
-        return r;
+        s->dev_kmsg_fd = TAKE_FD(fd);
+        s->dev_kmsg_event_source = TAKE_PTR(es);
+        return 0;
 }
 
 int server_open_kernel_seqnum(Server *s) {