From: Lennart Poettering Date: Mon, 16 Apr 2018 19:38:24 +0000 (+0200) Subject: machine-image: add proper refcounting X-Git-Tag: v239~208^2~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9614bb06ef60eea3ab6dd5d35f970ba60ef3fc63;p=thirdparty%2Fsystemd.git machine-image: add proper refcounting --- diff --git a/src/shared/machine-image.c b/src/shared/machine-image.c index 274d5401339..36861d93fcc 100644 --- a/src/shared/machine-image.c +++ b/src/shared/machine-image.c @@ -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; diff --git a/src/shared/machine-image.h b/src/shared/machine-image.h index f92e744f459..899268dbd1d 100644 --- a/src/shared/machine-image.h +++ b/src/shared/machine-image.h @@ -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); }