journal-remote: simplify error handling a bit

This commit is contained in:
Frantisek Sumsal
2023-06-19 23:42:00 +02:00
parent 3f38d582d5
commit 3c67c8bd4c
3 changed files with 37 additions and 55 deletions
+20 -46
View 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,
+14 -9
View File
@@ -30,6 +30,20 @@
#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;
+3
View 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 {