On Sun, Jun 03, 2018 at 01:41:59PM +0530, Sukrit Bhatnagar wrote: > New macros are added to src/util/viralloc.h which help in > adding cleanup attribute to variable declarations. > > Signed-off-by: Sukrit Bhatnagar <skrtbhtngr@xxxxxxxxx> > --- > src/util/viralloc.h | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 69 insertions(+) > > diff --git a/src/util/viralloc.h b/src/util/viralloc.h > index 69d0f90..bb37c48 100644 > --- a/src/util/viralloc.h > +++ b/src/util/viralloc.h > @@ -596,4 +596,73 @@ void virAllocTestInit(void); > int virAllocTestCount(void); > void virAllocTestOOM(int n, int m); > void virAllocTestHook(void (*func)(int, void*), void *data); > + > +# define VIR_AUTOPTR_FUNC_NAME(type) virAutoPtr##type > +# define VIR_AUTOCLEAR_FUNC_NAME(type) virAutoClear##type > + > +/** > + * VIR_DEFINE_AUTOPTR_FUNC: > + * @type: type of the variables(s) to free automatically - we are only going to use this with a single variable (or object if you will), so 'variables' doesn't sound right, how about: "type of the variable to be freed automatically" > + * @func: cleanup function to be automatically called > + * > + * This macro defines a function for automatic freeing of > + * resources allocated to a variable of type @type. The newly > + * defined function calls the corresponding pre-defined "This newly defined function works as a necessary wrapper around @func" > + * function @func. > + */ > +# define VIR_DEFINE_AUTOPTR_FUNC(type, func) \ > + static inline void VIR_AUTOPTR_FUNC_NAME(type)(type *_ptr) \ > + { \ > + (func)(*_ptr); \ > + } \ > + > +/** > + * VIR_DEFINE_AUTOCLEAR_FUNC: > + * @type: type of the variables(s) to free automatically > + * @func: cleanup function to be automatically called > + * > + * This macro defines a function for automatic clearing of > + * a variable of type @type. The newly deifined function calls > + * the corresponding pre-defined function @func. Same comments as above... > + */ > +# define VIR_DEFINE_AUTOCLEAR_FUNC(type, func) \ > + static inline void VIR_AUTOCLEAR_FUNC_NAME(type)(type *_ptr) \ > + { \ > + (func)(_ptr); \ > + } \ > + > +/** > + * VIR_AUTOFREE: > + * @type: type of the variables(s) to free automatically here too... > + * > + * Macro to automatically free the memory allocated to > + * the variable(s) declared with it by calling virFree s/(s)// > + * when the variable goes out of scope. > + */ > +# define VIR_AUTOFREE(type) __attribute__((cleanup(virFree))) type > + > +/** > + * VIR_AUTOPTR: > + * @type: type of the variables(s) to free automatically > + * > + * Macro to automatically free the memory allocated to > + * the variable(s) declared with it by calling the function same here... > + * defined by VIR_DEFINE_AUTOPTR_FUNC when the variable > + * goes out of scope. > + */ > +# define VIR_AUTOPTR(type) \ > + __attribute__((cleanup(VIR_AUTOPTR_FUNC_NAME(type)))) type > + > +/** > + * VIR_AUTOCLEAR: > + * @type: type of the variables(s) to free automatically > + * > + * Macro to automatically clear the variable(s) declared and here... > + * with it by calling the function defined by > + * VIR_DEFINE_AUTOCLEAR_FUNC when the variable goes out > + * of scope. > + */ > +# define VIR_AUTOCLEAR(type) \ > + __attribute__((cleanup(VIR_AUTOCLEAR_FUNC_NAME(type)))) type > + > #endif /* __VIR_MEMORY_H_ */ > -- > 1.8.3.1 Sorry, I missed these in the RFC, now that I read it again, I thought of a few wording improvements, functionally though, still fine and you have my R-b. Erik -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list