From: Ivan Kruglov Date: Wed, 2 Oct 2024 11:21:46 +0000 (+0200) Subject: machine: move manager_acquire_image to src/machine/machined-core.c X-Git-Tag: v257-rc1~238^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad0d4f9a4c340f3fd5f0fcf646f7c762722737cd;p=thirdparty%2Fsystemd.git machine: move manager_acquire_image to src/machine/machined-core.c This is a prep step to reuse the function in varlink interface. --- diff --git a/src/machine/image-dbus.c b/src/machine/image-dbus.c index 78c05ff5023..ff9d2f62581 100644 --- a/src/machine/image-dbus.c +++ b/src/machine/image-dbus.c @@ -377,60 +377,6 @@ int bus_image_method_get_os_release( return bus_reply_pair_array(message, image->os_release); } -static int image_flush_cache(sd_event_source *s, void *userdata) { - Manager *m = ASSERT_PTR(userdata); - - assert(s); - - hashmap_clear(m->image_cache); - return 0; -} - -int manager_acquire_image(Manager *m, const char *name, Image **ret) { - int r; - - assert(m); - assert(name); - - Image *existing = hashmap_get(m->image_cache, name); - if (existing) { - if (ret) - *ret = existing; - return 0; - } - - if (!m->image_cache_defer_event) { - r = sd_event_add_defer(m->event, &m->image_cache_defer_event, image_flush_cache, m); - if (r < 0) - return r; - - r = sd_event_source_set_priority(m->image_cache_defer_event, SD_EVENT_PRIORITY_IDLE); - if (r < 0) - return r; - } - - r = sd_event_source_set_enabled(m->image_cache_defer_event, SD_EVENT_ONESHOT); - if (r < 0) - return r; - - _cleanup_(image_unrefp) Image *image = NULL; - r = image_find(IMAGE_MACHINE, name, NULL, &image); - if (r < 0) - return r; - - image->userdata = m; - - r = hashmap_ensure_put(&m->image_cache, &image_hash_ops, image->name, image); - if (r < 0) - return r; - - if (ret) - *ret = image; - - TAKE_PTR(image); - return 0; -} - static int image_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) { _cleanup_free_ char *e = NULL; Manager *m = userdata; diff --git a/src/machine/image-dbus.h b/src/machine/image-dbus.h index c0d56b2eb47..0a7975bc528 100644 --- a/src/machine/image-dbus.h +++ b/src/machine/image-dbus.h @@ -7,7 +7,6 @@ extern const BusObjectImplementation image_object; -int manager_acquire_image(Manager *m, const char *name, Image **ret); char* image_bus_path(const char *name); int bus_image_method_remove(sd_bus_message *message, void *userdata, sd_bus_error *error); diff --git a/src/machine/machined-core.c b/src/machine/machined-core.c index baa9a605ba3..e0e4f684e25 100644 --- a/src/machine/machined-core.c +++ b/src/machine/machined-core.c @@ -402,3 +402,57 @@ int machine_get_os_release(Machine *machine, char ***ret_os_release) { *ret_os_release = TAKE_PTR(l); return 0; } + +static int image_flush_cache(sd_event_source *s, void *userdata) { + Manager *m = ASSERT_PTR(userdata); + + assert(s); + + hashmap_clear(m->image_cache); + return 0; +} + +int manager_acquire_image(Manager *m, const char *name, Image **ret) { + int r; + + assert(m); + assert(name); + + Image *existing = hashmap_get(m->image_cache, name); + if (existing) { + if (ret) + *ret = existing; + return 0; + } + + if (!m->image_cache_defer_event) { + r = sd_event_add_defer(m->event, &m->image_cache_defer_event, image_flush_cache, m); + if (r < 0) + return log_debug_errno(r, "Failed to add defered event: %m"); + + r = sd_event_source_set_priority(m->image_cache_defer_event, SD_EVENT_PRIORITY_IDLE); + if (r < 0) + return log_debug_errno(r, "Failed to set source priority for event: %m"); + } + + r = sd_event_source_set_enabled(m->image_cache_defer_event, SD_EVENT_ONESHOT); + if (r < 0) + return log_debug_errno(r, "Failed to enable source: %m") ; + + _cleanup_(image_unrefp) Image *image = NULL; + r = image_find(IMAGE_MACHINE, name, NULL, &image); + if (r < 0) + return log_debug_errno(r, "Failed to find image: %m"); + + image->userdata = m; + + r = hashmap_ensure_put(&m->image_cache, &image_hash_ops, image->name, image); + if (r < 0) + return r; + + if (ret) + *ret = image; + + TAKE_PTR(image); + return 0; +} diff --git a/src/machine/machined.h b/src/machine/machined.h index 721bf680122..9cc902f05f3 100644 --- a/src/machine/machined.h +++ b/src/machine/machined.h @@ -68,3 +68,4 @@ void manager_enqueue_gc(Manager *m); int machine_get_addresses(Machine* machine, struct local_address **ret_addresses); int machine_get_os_release(Machine *machine, char ***ret_os_release); +int manager_acquire_image(Manager *m, const char *name, Image **ret);