diff --git a/src/journal/journald-varlink.c b/src/journal/journald-varlink.c index cbadbca777..411b6af3f8 100644 --- a/src/journal/journald-varlink.c +++ b/src/journal/journald-varlink.c @@ -24,7 +24,7 @@ void sync_req_varlink_reply(SyncReq *req) { /* Disconnect the SyncReq from the Varlink connection object, and free it */ _cleanup_(sd_varlink_unrefp) sd_varlink *vl = TAKE_PTR(req->link); - sd_varlink_set_userdata(vl, req->manager); /* reinstall manager object */ + sd_varlink_set_userdata(vl, NULL); req = sync_req_free(req); r = sd_varlink_reply(vl, NULL); @@ -44,11 +44,10 @@ static int vl_method_synchronize(sd_varlink *link, sd_json_variant *parameters, assert(link); - /* Here, userdata may not be a pointer to the Manager object. Obtain the manager from the server. */ Manager *m = ASSERT_PTR(sd_varlink_server_get_userdata(sd_varlink_get_server(link))); /* The varlink connection already requested to sync journals. Refusing. */ - if (sd_varlink_get_userdata(link) != m) + if (sd_varlink_get_userdata(link)) return -EBUSY; r = sd_varlink_dispatch(link, parameters, dispatch_table, &offline); @@ -87,11 +86,12 @@ static int vl_method_synchronize(sd_varlink *link, sd_json_variant *parameters, } static int vl_method_rotate(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) { - Manager *m = ASSERT_PTR(userdata); int r; assert(link); + Manager *m = ASSERT_PTR(sd_varlink_server_get_userdata(sd_varlink_get_server(link))); + r = sd_varlink_dispatch(link, parameters, /* dispatch_table= */ NULL, /* userdata= */ NULL); if (r != 0) return r; @@ -108,11 +108,12 @@ static int vl_method_rotate(sd_varlink *link, sd_json_variant *parameters, sd_va } static int vl_method_flush_to_var(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) { - Manager *m = ASSERT_PTR(userdata); int r; assert(link); + Manager *m = ASSERT_PTR(sd_varlink_server_get_userdata(sd_varlink_get_server(link))); + r = sd_varlink_dispatch(link, parameters, /* dispatch_table= */ NULL, /* userdata= */ NULL); if (r != 0) return r; @@ -132,11 +133,12 @@ static int vl_method_flush_to_var(sd_varlink *link, sd_json_variant *parameters, } static int vl_method_relinquish_var(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) { - Manager *m = ASSERT_PTR(userdata); int r; assert(link); + Manager *m = ASSERT_PTR(sd_varlink_server_get_userdata(sd_varlink_get_server(link))); + r = sd_varlink_dispatch(link, parameters, /* dispatch_table= */ NULL, /* userdata= */ NULL); if (r != 0) return r; @@ -172,15 +174,7 @@ static void vl_disconnect(sd_varlink_server *server, sd_varlink *link, void *use assert(server); assert(link); - void *u = sd_varlink_get_userdata(link); - if (u != m) { - /* If this is a Varlink connection that does not have the Manager object as userdata, then - * it has a SyncReq object instead. Let's finish it. */ - - SyncReq *req = u; - sd_varlink_set_userdata(link, m); /* reinstall the manager object */ - sync_req_free(req); - } + sync_req_free(sd_varlink_set_userdata(link, NULL)); (void) manager_start_or_stop_idle_timer(m); /* maybe we are idle now */ } @@ -192,7 +186,7 @@ int manager_open_varlink(Manager *m, const char *socket, int fd) { r = varlink_server_new( &m->varlink_server, - SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA, + SD_VARLINK_SERVER_ACCOUNT_UID, m); if (r < 0) return log_error_errno(r, "Failed to allocate varlink server object: %m");