[libvirt] Re: [PATCH 01/12] Domain Events - Public API
Daniel P. Berrange
berrange at redhat.com
Thu Oct 23 10:33:25 UTC 2008
On Tue, Oct 21, 2008 at 03:11:08PM -0400, Ben Guthro wrote:
> [PATCH 01/12] Domain Events - Public API
>
> This patch does the following:
> -implements the Event register/deregister code
> -Adds some callback lists, and queue functions used by drivers
> -Move EventImpl definitions into the public
> +
> +/**
> + * virEventHandleType:
> + *
> + * a virEventHandleType is used similar to POLLxxx FD events, but is specific
> + * to libvirt. A client app must translate to, and from POLL events when using
> + * this construct.
> + */
> +typedef enum {
> + VIR_EVENT_HANDLE_READABLE = (1 << 0),
> + VIR_EVENT_HANDLE_WRITABLE = (1 << 1),
> + VIR_EVENT_HANDLE_ERROR = (1 << 2),
> + VIR_EVENT_HANDLE_HANGUP = (1 << 3),
> +} virEventHandleType;
> +
> +/**
> + * virEventHandleCallback: callback for receiving file handle events
> + *
> + * @fd: file handle on which the event occurred
> + * @events: bitset of events from virEventHandleType constants
> + * @opaque: user data registered with handle
> + */
> +typedef void (*virEventHandleCallback)(int fd, virEventHandleType events,
> + void *opaque);
We avoid using explicit enum types in any public API because they are
not ABI safe in terms of their size. In any case, the 'events' parameter
is atually a bit-mask of zero or more of the virEventHandleType constants,
so the use of the enum isn't technically correct.
> +
> +/**
> + * virEventAddHandleFunc:
> + * @fd: file descriptor to listen on
> + * @event: events on which to fire the callback
> + * @cb: the callback to be called
> + * @opaque: user data to pass to the callback
> + *
> + * Part of the EventImpl, this callback Adds a file handle callback to
> + * listen for specific events
> + */
> +typedef int (*virEventAddHandleFunc)(int fd, virEventHandleType event,
> + virEventHandleCallback cb, void *opaque);
Here too we should just use 'int events' as a bitmask
> +
> +/**
> + * virEventUpdateHandleFunc:
> + * @fd: file descriptor to modify
> + * @event: new events to listen on
> + *
> + * Part of the EventImpl, this user-provided callback is notified when
> + * events to listen on change
> + */
> +typedef void (*virEventUpdateHandleFunc)(int fd, virEventHandleType event);
Same 'int events' here too.
> +
> +
> +int
> +__virEventHandleTypeToPollEvent(virEventHandleType events)
> +{
> + int ret = 0;
> + if(events & VIR_EVENT_HANDLE_READABLE)
> + ret |= POLLIN;
> + if(events & VIR_EVENT_HANDLE_WRITABLE)
> + ret |= POLLOUT;
> + if(events & VIR_EVENT_HANDLE_ERROR)
> + ret |= POLLERR;
> + if(events & VIR_EVENT_HANDLE_HANGUP)
> + ret |= POLLHUP;
> + return ret;
> +}
> +
> +virEventHandleType
> +__virPollEventToEventHandleType(int events)
> +{
> + virEventHandleType ret = 0;
> + if(events & POLLIN)
> + ret |= VIR_EVENT_HANDLE_READABLE;
> + if(events & POLLOUT)
> + ret |= VIR_EVENT_HANDLE_WRITABLE;
> + if(events & POLLERR)
> + ret |= VIR_EVENT_HANDLE_ERROR;
> + if(events & POLLHUP)
> + ret |= VIR_EVENT_HANDLE_HANGUP;
> + return ret;
> +}
Since these two functions are only used by the libvirtd daemon at
this point, I think its better to just put them in qemud/event.c.
This will avoid need to add conditionals here to disable their
build on Mingw/Windows.
> diff --git a/src/libvirt_sym.version b/src/libvirt_sym.version
> index 3cc4505..0297c9c 100644
> --- a/src/libvirt_sym.version
> +++ b/src/libvirt_sym.version
> @@ -147,6 +147,10 @@
> virStorageVolGetXMLDesc;
> virStorageVolGetPath;
>
> + virEventRegisterImpl;
> + virConnectDomainEventRegister;
> + virConnectDomainEventDeregister;
> +
> /* Symbols with __ are private only
> for use by the libvirtd daemon.
> They are not part of stable ABI
> @@ -167,8 +171,6 @@
> __virGetStoragePool;
> __virGetStorageVol;
>
> - __virEventRegisterImpl;
> -
> __virStateInitialize;
> __virStateCleanup;
> __virStateReload;
> @@ -198,5 +200,7 @@
> __virReallocN;
> __virFree;
>
> + __virEventHandleTypeToPollEvent;
> + __virPollEventToEventHandleType;
These will also be unnecccessary if we put them in qemud/event.c
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list