mirror of
https://github.com/systemd/systemd
synced 2024-10-15 12:34:37 +00:00
Merge pull request #32216 from DaanDeMeyer/fix
journal-remote: Use sd_event_set_signal_exit()
This commit is contained in:
commit
eff0a82534
|
@ -451,7 +451,7 @@ static int setup_microhttpd_server(RemoteServer *s,
|
||||||
if (epoll_fd < 0)
|
if (epoll_fd < 0)
|
||||||
return log_error_errno(SYNTHETIC_ERRNO(EUCLEAN), "μhttp epoll fd is invalid");
|
return log_error_errno(SYNTHETIC_ERRNO(EUCLEAN), "μhttp epoll fd is invalid");
|
||||||
|
|
||||||
r = sd_event_add_io(s->events, &d->io_event,
|
r = sd_event_add_io(s->event, &d->io_event,
|
||||||
epoll_fd, EPOLLIN,
|
epoll_fd, EPOLLIN,
|
||||||
dispatch_http_event, d);
|
dispatch_http_event, d);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
@ -461,7 +461,7 @@ static int setup_microhttpd_server(RemoteServer *s,
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to set source name: %m");
|
return log_error_errno(r, "Failed to set source name: %m");
|
||||||
|
|
||||||
r = sd_event_add_time(s->events, &d->timer_event,
|
r = sd_event_add_time(s->event, &d->timer_event,
|
||||||
CLOCK_MONOTONIC, UINT64_MAX, 0,
|
CLOCK_MONOTONIC, UINT64_MAX, 0,
|
||||||
null_timer_event_handler, d);
|
null_timer_event_handler, d);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
@ -535,24 +535,6 @@ static int dispatch_http_event(sd_event_source *event,
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
static int setup_signals(RemoteServer *s) {
|
|
||||||
int r;
|
|
||||||
|
|
||||||
assert(s);
|
|
||||||
|
|
||||||
assert_se(sigprocmask_many(SIG_SETMASK, NULL, SIGINT, SIGTERM) >= 0);
|
|
||||||
|
|
||||||
r = sd_event_add_signal(s->events, &s->sigterm_event, SIGTERM, NULL, s);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = sd_event_add_signal(s->events, &s->sigint_event, SIGINT, NULL, s);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int setup_raw_socket(RemoteServer *s, const char *address) {
|
static int setup_raw_socket(RemoteServer *s, const char *address) {
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
|
@ -580,9 +562,9 @@ static int create_remoteserver(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = setup_signals(s);
|
r = sd_event_set_signal_exit(s->event, true);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to set up signals: %m");
|
return log_error_errno(r, "Failed to install SIGINT/SIGTERM handlers: %m");
|
||||||
|
|
||||||
n = sd_listen_fds(true);
|
n = sd_listen_fds(true);
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
|
@ -1128,7 +1110,7 @@ static int run(int argc, char **argv) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = sd_event_set_watchdog(s.events, true);
|
r = sd_event_set_watchdog(s.event, true);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to enable watchdog: %m");
|
return log_error_errno(r, "Failed to enable watchdog: %m");
|
||||||
|
|
||||||
|
@ -1140,13 +1122,13 @@ static int run(int argc, char **argv) {
|
||||||
notify_message = notify_start(NOTIFY_READY, NOTIFY_STOPPING);
|
notify_message = notify_start(NOTIFY_READY, NOTIFY_STOPPING);
|
||||||
|
|
||||||
while (s.active) {
|
while (s.active) {
|
||||||
r = sd_event_get_state(s.events);
|
r = sd_event_get_state(s.event);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
if (r == SD_EVENT_FINISHED)
|
if (r == SD_EVENT_FINISHED)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
r = sd_event_run(s.events, -1);
|
r = sd_event_run(s.event, -1);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to run event loop: %m");
|
return log_error_errno(r, "Failed to run event loop: %m");
|
||||||
}
|
}
|
||||||
|
|
|
@ -257,19 +257,19 @@ int journal_remote_add_source(RemoteServer *s, int fd, char* name, bool own_name
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = sd_event_add_io(s->events, &source->event,
|
r = sd_event_add_io(s->event, &source->event,
|
||||||
fd, EPOLLIN|EPOLLRDHUP|EPOLLPRI,
|
fd, EPOLLIN|EPOLLRDHUP|EPOLLPRI,
|
||||||
dispatch_raw_source_event, source);
|
dispatch_raw_source_event, source);
|
||||||
if (r == 0) {
|
if (r == 0) {
|
||||||
/* Add additional source for buffer processing. It will be
|
/* Add additional source for buffer processing. It will be
|
||||||
* enabled later. */
|
* enabled later. */
|
||||||
r = sd_event_add_defer(s->events, &source->buffer_event,
|
r = sd_event_add_defer(s->event, &source->buffer_event,
|
||||||
dispatch_raw_source_until_block, source);
|
dispatch_raw_source_until_block, source);
|
||||||
if (r == 0)
|
if (r == 0)
|
||||||
r = sd_event_source_set_enabled(source->buffer_event, SD_EVENT_OFF);
|
r = sd_event_source_set_enabled(source->buffer_event, SD_EVENT_OFF);
|
||||||
} else if (r == -EPERM) {
|
} else if (r == -EPERM) {
|
||||||
log_debug("Falling back to sd_event_add_defer for fd:%d (%s)", fd, name);
|
log_debug("Falling back to sd_event_add_defer for fd:%d (%s)", fd, name);
|
||||||
r = sd_event_add_defer(s->events, &source->event,
|
r = sd_event_add_defer(s->event, &source->event,
|
||||||
dispatch_blocking_source_event, source);
|
dispatch_blocking_source_event, source);
|
||||||
if (r == 0)
|
if (r == 0)
|
||||||
r = sd_event_source_set_enabled(source->event, SD_EVENT_ON);
|
r = sd_event_source_set_enabled(source->event, SD_EVENT_ON);
|
||||||
|
@ -301,7 +301,7 @@ int journal_remote_add_raw_socket(RemoteServer *s, int fd) {
|
||||||
assert(s);
|
assert(s);
|
||||||
assert(fd >= 0);
|
assert(fd >= 0);
|
||||||
|
|
||||||
r = sd_event_add_io(s->events, &s->listen_event,
|
r = sd_event_add_io(s->event, &s->listen_event,
|
||||||
fd, EPOLLIN,
|
fd, EPOLLIN,
|
||||||
dispatch_raw_connection_event, s);
|
dispatch_raw_connection_event, s);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
@ -347,7 +347,7 @@ int journal_remote_server_init(
|
||||||
else
|
else
|
||||||
assert_not_reached();
|
assert_not_reached();
|
||||||
|
|
||||||
r = sd_event_default(&s->events);
|
r = sd_event_default(&s->event);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to allocate event loop: %m");
|
return log_error_errno(r, "Failed to allocate event loop: %m");
|
||||||
|
|
||||||
|
@ -375,10 +375,8 @@ void journal_remote_server_destroy(RemoteServer *s) {
|
||||||
writer_unref(s->_single_writer);
|
writer_unref(s->_single_writer);
|
||||||
hashmap_free(s->writers);
|
hashmap_free(s->writers);
|
||||||
|
|
||||||
sd_event_source_unref(s->sigterm_event);
|
|
||||||
sd_event_source_unref(s->sigint_event);
|
|
||||||
sd_event_source_unref(s->listen_event);
|
sd_event_source_unref(s->listen_event);
|
||||||
sd_event_unref(s->events);
|
sd_event_unref(s->event);
|
||||||
|
|
||||||
if (s == journal_remote_server_global)
|
if (s == journal_remote_server_global)
|
||||||
journal_remote_server_global = NULL;
|
journal_remote_server_global = NULL;
|
||||||
|
|
|
@ -29,8 +29,8 @@ struct RemoteServer {
|
||||||
RemoteSource **sources;
|
RemoteSource **sources;
|
||||||
size_t active;
|
size_t active;
|
||||||
|
|
||||||
sd_event *events;
|
sd_event *event;
|
||||||
sd_event_source *sigterm_event, *sigint_event, *listen_event;
|
sd_event_source *listen_event;
|
||||||
|
|
||||||
Hashmap *writers;
|
Hashmap *writers;
|
||||||
Writer *_single_writer;
|
Writer *_single_writer;
|
||||||
|
|
|
@ -388,7 +388,7 @@ int open_journal_for_upload(Uploader *u,
|
||||||
else
|
else
|
||||||
u->timeout = JOURNAL_UPLOAD_POLL_TIMEOUT;
|
u->timeout = JOURNAL_UPLOAD_POLL_TIMEOUT;
|
||||||
|
|
||||||
r = sd_event_add_io(u->events, &u->input_event,
|
r = sd_event_add_io(u->event, &u->input_event,
|
||||||
fd, events, dispatch_journal_input, u);
|
fd, events, dispatch_journal_input, u);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to register input event: %m");
|
return log_error_errno(r, "Failed to register input event: %m");
|
||||||
|
|
|
@ -364,7 +364,7 @@ static int open_file_for_upload(Uploader *u, const char *filename) {
|
||||||
u->input = fd;
|
u->input = fd;
|
||||||
|
|
||||||
if (arg_follow != 0) {
|
if (arg_follow != 0) {
|
||||||
r = sd_event_add_io(u->events, &u->input_event,
|
r = sd_event_add_io(u->event, &u->input_event,
|
||||||
fd, EPOLLIN, dispatch_fd_input, u);
|
fd, EPOLLIN, dispatch_fd_input, u);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
if (r != -EPERM || arg_follow > 0)
|
if (r != -EPERM || arg_follow > 0)
|
||||||
|
@ -378,38 +378,6 @@ static int open_file_for_upload(Uploader *u, const char *filename) {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dispatch_sigterm(sd_event_source *event,
|
|
||||||
const struct signalfd_siginfo *si,
|
|
||||||
void *userdata) {
|
|
||||||
Uploader *u = ASSERT_PTR(userdata);
|
|
||||||
|
|
||||||
log_received_signal(LOG_INFO, si);
|
|
||||||
|
|
||||||
close_fd_input(u);
|
|
||||||
close_journal_input(u);
|
|
||||||
|
|
||||||
sd_event_exit(u->events, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int setup_signals(Uploader *u) {
|
|
||||||
int r;
|
|
||||||
|
|
||||||
assert(u);
|
|
||||||
|
|
||||||
assert_se(sigprocmask_many(SIG_SETMASK, NULL, SIGINT, SIGTERM) >= 0);
|
|
||||||
|
|
||||||
r = sd_event_add_signal(u->events, &u->sigterm_event, SIGTERM, dispatch_sigterm, u);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = sd_event_add_signal(u->events, &u->sigint_event, SIGINT, dispatch_sigterm, u);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int setup_uploader(Uploader *u, const char *url, const char *state_file) {
|
static int setup_uploader(Uploader *u, const char *url, const char *state_file) {
|
||||||
int r;
|
int r;
|
||||||
const char *host, *proto = "";
|
const char *host, *proto = "";
|
||||||
|
@ -445,13 +413,13 @@ static int setup_uploader(Uploader *u, const char *url, const char *state_file)
|
||||||
|
|
||||||
u->state_file = state_file;
|
u->state_file = state_file;
|
||||||
|
|
||||||
r = sd_event_default(&u->events);
|
r = sd_event_default(&u->event);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "sd_event_default failed: %m");
|
return log_error_errno(r, "sd_event_default failed: %m");
|
||||||
|
|
||||||
r = setup_signals(u);
|
r = sd_event_set_signal_exit(u->event, true);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to set up signals: %m");
|
return log_error_errno(r, "Failed to install SIGINT/SIGTERM handlers: %m");
|
||||||
|
|
||||||
(void) sd_watchdog_enabled(false, &u->watchdog_usec);
|
(void) sd_watchdog_enabled(false, &u->watchdog_usec);
|
||||||
|
|
||||||
|
@ -475,9 +443,7 @@ static void destroy_uploader(Uploader *u) {
|
||||||
close_fd_input(u);
|
close_fd_input(u);
|
||||||
close_journal_input(u);
|
close_journal_input(u);
|
||||||
|
|
||||||
sd_event_source_unref(u->sigterm_event);
|
sd_event_unref(u->event);
|
||||||
sd_event_source_unref(u->sigint_event);
|
|
||||||
sd_event_unref(u->events);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int perform_upload(Uploader *u) {
|
static int perform_upload(Uploader *u) {
|
||||||
|
@ -816,7 +782,7 @@ static int run(int argc, char **argv) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
sd_event_set_watchdog(u.events, true);
|
sd_event_set_watchdog(u.event, true);
|
||||||
|
|
||||||
r = check_cursor_updating(&u);
|
r = check_cursor_updating(&u);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
@ -844,7 +810,7 @@ static int run(int argc, char **argv) {
|
||||||
NOTIFY_STOPPING);
|
NOTIFY_STOPPING);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
r = sd_event_get_state(u.events);
|
r = sd_event_get_state(u.event);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
if (r == SD_EVENT_FINISHED)
|
if (r == SD_EVENT_FINISHED)
|
||||||
|
@ -871,7 +837,7 @@ static int run(int argc, char **argv) {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = sd_event_run(u.events, u.timeout);
|
r = sd_event_run(u.event, u.timeout);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to run event loop: %m");
|
return log_error_errno(r, "Failed to run event loop: %m");
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,7 @@ typedef enum {
|
||||||
} entry_state;
|
} entry_state;
|
||||||
|
|
||||||
typedef struct Uploader {
|
typedef struct Uploader {
|
||||||
sd_event *events;
|
sd_event *event;
|
||||||
sd_event_source *sigint_event, *sigterm_event;
|
|
||||||
|
|
||||||
char *url;
|
char *url;
|
||||||
CURL *easy;
|
CURL *easy;
|
||||||
|
|
Loading…
Reference in a new issue