mirror of
https://github.com/systemd/systemd.git
synced 2024-10-28 20:25:38 +03:00
machine-image: add proper refcounting
This commit is contained in:
parent
2ddf182baa
commit
9614bb06ef
@ -61,6 +61,12 @@ Image *image_unref(Image *i) {
|
||||
if (!i)
|
||||
return NULL;
|
||||
|
||||
assert(i->n_ref > 0);
|
||||
i->n_ref--;
|
||||
|
||||
if (i->n_ref > 0)
|
||||
return NULL;
|
||||
|
||||
free(i->name);
|
||||
free(i->path);
|
||||
|
||||
@ -71,6 +77,16 @@ Image *image_unref(Image *i) {
|
||||
return mfree(i);
|
||||
}
|
||||
|
||||
Image *image_ref(Image *i) {
|
||||
if (!i)
|
||||
return NULL;
|
||||
|
||||
assert(i->n_ref > 0);
|
||||
i->n_ref++;
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
static char **image_settings_path(Image *image) {
|
||||
_cleanup_strv_free_ char **l = NULL;
|
||||
const char *fn, *s;
|
||||
@ -131,6 +147,7 @@ static int image_new(
|
||||
if (!i)
|
||||
return -ENOMEM;
|
||||
|
||||
i->n_ref = 1;
|
||||
i->type = t;
|
||||
i->read_only = read_only;
|
||||
i->crtime = crtime;
|
||||
|
@ -34,6 +34,8 @@ typedef enum ImageType {
|
||||
} ImageType;
|
||||
|
||||
typedef struct Image {
|
||||
unsigned n_ref;
|
||||
|
||||
ImageType type;
|
||||
char *name;
|
||||
char *path;
|
||||
@ -58,6 +60,8 @@ typedef struct Image {
|
||||
} Image;
|
||||
|
||||
Image *image_unref(Image *i);
|
||||
Image *image_ref(Image *i);
|
||||
|
||||
static inline Hashmap* image_hashmap_free(Hashmap *map) {
|
||||
return hashmap_free_with_destructor(map, image_unref);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user