machine: move manager_acquire_image to src/machine/machined-core.c

This is a prep step to reuse the function in varlink interface.
This commit is contained in:
Ivan Kruglov
2024-10-02 13:21:46 +02:00
parent 4439679892
commit ad0d4f9a4c
4 changed files with 55 additions and 55 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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);