From 688d39ff621625c6d231f5c5c164cf8e6fb5fe98 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 3 Apr 2024 17:10:47 -0400 Subject: [PATCH] MT#55283 add public obj_init() This allows usage of refcounted objects using custom allocators or static storage. Use the magic size of -1 to indicate that the internal free function should not be called. Change-Id: I64b7581d15c120d030c13d6cb03e8ada26f46bdf --- lib/obj.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/obj.h b/lib/obj.h index 49b40e24c..b42ac99da 100644 --- a/lib/obj.h +++ b/lib/obj.h @@ -55,6 +55,7 @@ struct obj { #define obj_alloc(t,a,b) __obj_alloc(a,b,t,__FILE__,__func__,__LINE__) #define obj_alloc0(t,a,b) __obj_alloc0(a,b,t,__FILE__,__func__,__LINE__) +#define obj_init(t,a,b) __obj_init(a,-1,b,t,__FILE__,__func__,__LINE__) #define obj_hold(a) __obj_hold(&(a)->obj,__FILE__,__func__,__LINE__) #define obj_get(a) __obj_get(&(a)->obj,__FILE__,__func__,__LINE__) #define obj_put(a) __obj_put(&(a)->obj,__FILE__,__func__,__LINE__) @@ -79,6 +80,7 @@ INLINE void __obj_put(struct obj *o, #define obj_alloc(t,a,b) __obj_alloc(a,b) #define obj_alloc0(t,a,b) __obj_alloc0(a,b) +#define obj_init(t,a,b) __obj_init(a,-1,b) #define obj_hold(a) __obj_hold(&(a)->obj) #define obj_get(a) __obj_get(&(a)->obj) #define obj_put(a) __obj_put(&(a)->obj) @@ -226,7 +228,8 @@ INLINE void __obj_put(struct obj *o if (o->type) free(o->type); #endif - g_slice_free1(o->size, o); + if (o->size != -1) + g_slice_free1(o->size, o); }