X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=src%2Fjournal-remote%2Fjournal-remote.c;h=ad87783510cff94a02d8f5c42ba5c005322c5c3f;hb=22259a00fdb54dee818eeb1019421e2c516a330d;hp=1cc86aeaf3bf17a87e7da57357d1a70acf4d3ac2;hpb=af4ec4309e8f82aad87a8d574785c12f8763d5f8;p=elogind.git diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c index 1cc86aeaf..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(); @@ -695,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; @@ -814,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", @@ -944,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