[libvirt] [PATCH v1 01/18] add macros for implementing automatic cleanup functionality

Erik Skultety eskultet at redhat.com
Tue Jun 5 07:19:36 UTC 2018


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 at gmail.com>
> ---
>  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




More information about the libvir-list mailing list