[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] libxl: unconst the event argument to the event_occurs hook.



Ian Campbell wrote:
> The event is supposed to become owned, and therefore freed, by the application
> and the const prevents this.
>
> Unfortunately there is no way to remove the const without breaking existing
> callers. The best we can do is use the LIBXL_API_VERSION provisions to remove
> the const for callers who wish only to support the 4.3 API and newer.
>
> Callers who wish to support 4.2 will need to live with casting away the const.
>
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> Cc: Ian.Jackson@xxxxxxxxxx
> Cc: George.Dunlap@xxxxxxxxx
> Cc: Jim Fehlig <jfehlig@xxxxxxxx>
> Cc: Rob Hoes <Rob.Hoes@xxxxxxxxxx>
> ---
>  tools/libxl/libxl.h       |   14 ++++++++++++--
>  tools/libxl/libxl_event.h |    6 +++++-
>  2 files changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> index 25efa76..ef96bce 100644
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -273,9 +273,9 @@
>  #include <libxl_uuid.h>
>  #include <_libxl_list.h>
>  
> -/* API compatibility. Only 0x040200 is supported at this time. */
> +/* API compatibility. */
>  #ifdef LIBXL_API_VERSION
> -#if LIBXL_API_VERSION != 0x040200
> +#if LIBXL_API_VERSION != 0x040200 && LIBXL_API_VERSION != 0x040300
>  #error Unknown LIBXL_API_VERSION
>  #endif
>  #endif
>   

Should this hunk be in a separate patch? It seems to be introducing a
new API version :).

> @@ -308,6 +308,16 @@
>   */
>  #define LIBXL_HAVE_DEVICE_BACKEND_DOMNAME 1
>  
> +/*
> + * LIBXL_HAVE_NONCONST_EVENT_OCCURS_EVENT_ARG
> + *
> + * This argument was erroneously "const" in the 4.2 release despite
> + * the requirement for the callback to free the event.
> + */
> +#if LIBXL_API_VERSION != 0x040200
> +#define LIBXL_HAVE_NONCONST_EVENT_OCCURS_EVENT_ARG 1
> +#endif
> +
>  /* Functions annotated with LIBXL_EXTERNAL_CALLERS_ONLY may not be
>   * called from within libxl itself. Callers outside libxl, who
>   * do not #include libxl_internal.h, are fine. */
> diff --git a/tools/libxl/libxl_event.h b/tools/libxl/libxl_event.h
> index 51f2721..27a65dc 100644
> --- a/tools/libxl/libxl_event.h
> +++ b/tools/libxl/libxl_event.h
> @@ -64,7 +64,11 @@ void libxl_event_free(libxl_ctx *ctx, libxl_event *event);
>  
>  typedef struct libxl_event_hooks {
>      uint64_t event_occurs_mask;
> -    void (*event_occurs)(void *user, const libxl_event *event);
> +    void (*event_occurs)(void *user,
> +#ifndef LIBXL_HAVE_NONCONST_EVENT_OCCURS_EVENT_ARG
> +                         const
> +#endif
> +                         libxl_event *event);
>      void (*disaster)(void *user, libxl_event_type type,
>                       const char *msg, int errnoval);
>  } libxl_event_hooks;
>   

Otherwise,

Reviewed-by: Jim Fehlig <jfehlig@xxxxxxxx>


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.