Browse Source

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
pull/1819/head
Richard Fuchs 2 years ago
parent
commit
688d39ff62
1 changed files with 4 additions and 1 deletions
  1. +4
    -1
      lib/obj.h

+ 4
- 1
lib/obj.h View File

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


Loading…
Cancel
Save