X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fjournal-remote%2Fjournal-remote.c;h=ad87783510cff94a02d8f5c42ba5c005322c5c3f;hp=aa659d1bd4b7278c489db88615645f250cfd5f3c;hb=22259a00fdb54dee818eeb1019421e2c516a330d;hpb=dad29dff1925a114e20d4eb7b47fca23c4f25fd7 diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c index aa659d1bd..ad8778351 100644 --- a/src/journal-remote/journal-remote.c +++ b/src/journal-remote/journal-remote.c @@ -222,20 +222,14 @@ static int open_output(Writer *w, const char* host) { **********************************************************************/ static int init_writer_hashmap(RemoteServer *s) { - static const struct { - hash_func_t hash_func; - compare_func_t compare_func; - } functions[] = { - [JOURNAL_WRITE_SPLIT_NONE] = {trivial_hash_func, - trivial_compare_func}, - [JOURNAL_WRITE_SPLIT_HOST] = {string_hash_func, - string_compare_func}, + static const struct hash_ops *hash_ops[] = { + [JOURNAL_WRITE_SPLIT_NONE] = NULL, + [JOURNAL_WRITE_SPLIT_HOST] = &string_hash_ops, }; - assert(arg_split_mode >= 0 && arg_split_mode < (int) ELEMENTSOF(functions)); + assert(arg_split_mode >= 0 && arg_split_mode < (int) ELEMENTSOF(hash_ops)); - s->writers = hashmap_new(functions[arg_split_mode].hash_func, - functions[arg_split_mode].compare_func); + s->writers = hashmap_new(hash_ops[arg_split_mode]); if (!s->writers) return log_oom(); @@ -579,7 +573,6 @@ static int request_handler( log_error("MHD_get_connection_info failed: cannot get remote fd"); return mhd_respond(connection, MHD_HTTP_INTERNAL_SERVER_ERROR, "Cannot check remote address"); - return code; } fd = ci->connect_fd; @@ -696,7 +689,7 @@ static int setup_microhttpd_server(RemoteServer *s, goto error; } - r = hashmap_ensure_allocated(&s->daemons, uint64_hash_func, uint64_compare_func); + r = hashmap_ensure_allocated(&s->daemons, &uint64_hash_ops); if (r < 0) { log_oom(); goto error; @@ -815,13 +808,21 @@ static int remoteserver_init(RemoteServer *s, return -EINVAL; } - sd_event_default(&s->events); + r = sd_event_default(&s->events); + if (r < 0) { + log_error("Failed to allocate event loop: %s", strerror(-r)); + return r; + } setup_signals(s); assert(server == NULL); server = s; + r = init_writer_hashmap(s); + if (r < 0) + return r; + n = sd_listen_fds(true); if (n < 0) { log_error("Failed to read listening file descriptors from environment: %s", @@ -945,10 +946,6 @@ static int remoteserver_init(RemoteServer *s, return -EINVAL; } - r = init_writer_hashmap(s); - if (r < 0) - return r; - if (arg_split_mode == JOURNAL_WRITE_SPLIT_NONE) { /* In this case we know what the writer will be called, so we can create it and verify that we can @@ -1531,10 +1528,12 @@ int main(int argc, char **argv) { } } - server_destroy(&s); + sd_notifyf(false, + "STOPPING=1\n" + "STATUS=Shutting down after writing %" PRIu64 " entries...", s.event_count); log_info("Finishing after writing %" PRIu64 " entries", s.event_count); - sd_notify(false, "STATUS=Shutting down..."); + server_destroy(&s); free(arg_key); free(arg_cert);