Skip to content

Commit

Permalink
journal-remote: Use sd_event_set_signal_exit()
Browse files Browse the repository at this point in the history
This also fixes bugs in the previous code where we pass the server
object as userdata to sd_event_add_signal which means that sd-event
tries to use the value of the server pointer as its exit code when
a signal is triggered.

(cherry picked from commit dcd332a)
(cherry picked from commit 247627c)
(cherry picked from commit 233b373)
  • Loading branch information
DaanDeMeyer authored and bluca committed Apr 25, 2024
1 parent 4774409 commit c31526a
Show file tree
Hide file tree
Showing 5 changed files with 5 additions and 60 deletions.
22 changes: 2 additions & 20 deletions src/journal-remote/journal-remote-main.c
Original file line number Diff line number Diff line change
Expand Up @@ -564,24 +564,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, -1) >= 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) {
int fd;

Expand Down Expand Up @@ -609,9 +591,9 @@ static int create_remoteserver(
if (r < 0)
return r;

r = setup_signals(s);
r = sd_event_set_signal_exit(s->events, true);
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);
if (n < 0)
Expand Down
2 changes: 0 additions & 2 deletions src/journal-remote/journal-remote.c
Original file line number Diff line number Diff line change
Expand Up @@ -362,8 +362,6 @@ void journal_remote_server_destroy(RemoteServer *s) {
writer_unref(s->_single_writer);
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_unref(s->events);

Expand Down
2 changes: 1 addition & 1 deletion src/journal-remote/journal-remote.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ struct RemoteServer {
size_t active;

sd_event *events;
sd_event_source *sigterm_event, *sigint_event, *listen_event;
sd_event_source *listen_event;

Hashmap *writers;
Writer *_single_writer;
Expand Down
38 changes: 2 additions & 36 deletions src/journal-remote/journal-upload.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,38 +379,6 @@ static int open_file_for_upload(Uploader *u, const char *filename) {
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, -1) >= 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) {
int r;
const char *host, *proto = "";
Expand Down Expand Up @@ -450,9 +418,9 @@ static int setup_uploader(Uploader *u, const char *url, const char *state_file)
if (r < 0)
return log_error_errno(r, "sd_event_default failed: %m");

r = setup_signals(u);
r = sd_event_set_signal_exit(u->events, true);
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);

Expand All @@ -476,8 +444,6 @@ static void destroy_uploader(Uploader *u) {
close_fd_input(u);
close_journal_input(u);

sd_event_source_unref(u->sigterm_event);
sd_event_source_unref(u->sigint_event);
sd_event_unref(u->events);
}

Expand Down
1 change: 0 additions & 1 deletion src/journal-remote/journal-upload.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ typedef enum {

typedef struct Uploader {
sd_event *events;
sd_event_source *sigint_event, *sigterm_event;

char *url;
CURL *easy;
Expand Down

0 comments on commit c31526a

Please sign in to comment.