]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journal-remote: simplify error handling a bit
authorFrantisek Sumsal <frantisek@sumsal.cz>
Mon, 19 Jun 2023 15:12:30 +0000 (17:12 +0200)
committerFrantisek Sumsal <frantisek@sumsal.cz>
Mon, 19 Jun 2023 21:42:00 +0000 (23:42 +0200)
src/journal-remote/journal-remote-main.c
src/journal-remote/journal-remote.c
src/journal-remote/journal-remote.h

index db94644ceba4b068aa53179ccc6f397a7b115ae3..2d01e6013e2fc392597b8178c283259866b75f78 100644 (file)
@@ -385,9 +385,9 @@ static int setup_microhttpd_server(RemoteServer *s,
                 MHD_USE_EPOLL |
                 MHD_USE_ITC;
 
+        _cleanup_(MHDDaemonWrapper_freep) MHDDaemonWrapper *d = NULL;
         const union MHD_DaemonInfo *info;
         int r, epoll_fd;
-        MHDDaemonWrapper *d;
 
         assert(fd >= 0);
 
@@ -435,75 +435,49 @@ static int setup_microhttpd_server(RemoteServer *s,
                                      request_handler, NULL,
                                      MHD_OPTION_ARRAY, opts,
                                      MHD_OPTION_END);
-        if (!d->daemon) {
-                log_error("Failed to start μhttp daemon");
-                r = -EINVAL;
-                goto error;
-        }
+        if (!d->daemon)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to start μhttp daemon");
 
         log_debug("Started MHD %s daemon on fd:%d (wrapper @ %p)",
                   key ? "HTTPS" : "HTTP", fd, d);
 
         info = MHD_get_daemon_info(d->daemon, MHD_DAEMON_INFO_EPOLL_FD_LINUX_ONLY);
-        if (!info) {
-                log_error("μhttp returned NULL daemon info");
-                r = -EOPNOTSUPP;
-                goto error;
-        }
+        if (!info)
+                return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "μhttp returned NULL daemon info");
 
         epoll_fd = info->listen_fd;
-        if (epoll_fd < 0) {
-                log_error("μhttp epoll fd is invalid");
-                r = -EUCLEAN;
-                goto error;
-        }
+        if (epoll_fd < 0)
+                return log_error_errno(SYNTHETIC_ERRNO(EUCLEAN), "μhttp epoll fd is invalid");
 
         r = sd_event_add_io(s->events, &d->io_event,
                             epoll_fd, EPOLLIN,
                             dispatch_http_event, d);
-        if (r < 0) {
-                log_error_errno(r, "Failed to add event callback: %m");
-                goto error;
-        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to add event callback: %m");
 
         r = sd_event_source_set_description(d->io_event, "io_event");
-        if (r < 0) {
-                log_error_errno(r, "Failed to set source name: %m");
-                goto error;
-        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to set source name: %m");
 
         r = sd_event_add_time(s->events, &d->timer_event,
                               CLOCK_MONOTONIC, UINT64_MAX, 0,
                               null_timer_event_handler, d);
-        if (r < 0) {
-                log_error_errno(r, "Failed to add timer_event: %m");
-                goto error;
-        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to add timer_event: %m");
 
         r = sd_event_source_set_description(d->timer_event, "timer_event");
-        if (r < 0) {
-                log_error_errno(r, "Failed to set source name: %m");
-                goto error;
-        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to set source name: %m");
 
         r = hashmap_ensure_put(&s->daemons, &uint64_hash_ops, &d->fd, d);
-        if (r == -ENOMEM) {
-                log_oom();
-                goto error;
-        }
-        if (r < 0) {
-                log_error_errno(r, "Failed to add daemon to hashmap: %m");
-                goto error;
-        }
+        if (r == -ENOMEM)
+                return log_oom();
+        if (r < 0)
+                return log_error_errno(r, "Failed to add daemon to hashmap: %m");
 
+        TAKE_PTR(d);
         s->active++;
         return 0;
-
-error:
-        MHD_stop_daemon(d->daemon);
-        free(d->daemon);
-        free(d);
-        return r;
 }
 
 static int setup_microhttpd_socket(RemoteServer *s,
index 8b64bc78e9ffb4a30b2d0428aeb1afab92010488..08b3e53ef220312e7a0578a0b0756432eb0c2898 100644 (file)
 
 #define filename_escape(s) xescape((s), "/ ")
 
+#if HAVE_MICROHTTPD
+MHDDaemonWrapper *MHDDaemonWrapper_free(MHDDaemonWrapper *d) {
+        if (!d)
+                return NULL;
+
+        if (d->daemon)
+                MHD_stop_daemon(d->daemon);
+        sd_event_source_unref(d->io_event);
+        sd_event_source_unref(d->timer_event);
+
+        return mfree(d);
+}
+#endif
+
 static int open_output(RemoteServer *s, Writer *w, const char* host) {
         _cleanup_free_ char *_filename = NULL;
         const char *filename;
@@ -338,15 +352,6 @@ int journal_remote_server_init(
         return 0;
 }
 
-#if HAVE_MICROHTTPD
-static void MHDDaemonWrapper_free(MHDDaemonWrapper *d) {
-        MHD_stop_daemon(d->daemon);
-        sd_event_source_unref(d->io_event);
-        sd_event_source_unref(d->timer_event);
-        free(d);
-}
-#endif
-
 void journal_remote_server_destroy(RemoteServer *s) {
         size_t i;
 
index 39d044648142616f40afd051089c535f7551d20a..8d73f95dc9c5bac4e5f388dcfe7538584541fc14 100644 (file)
@@ -20,6 +20,9 @@ struct MHDDaemonWrapper {
         sd_event_source *io_event;
         sd_event_source *timer_event;
 };
+
+MHDDaemonWrapper *MHDDaemonWrapper_free(MHDDaemonWrapper *d);
+DEFINE_TRIVIAL_CLEANUP_FUNC(MHDDaemonWrapper*, MHDDaemonWrapper_free);
 #endif
 
 struct RemoteServer {