
On Fri, Mar 19, 2010 at 11:06:40AM -0600, Eric Blake wrote:
On 03/19/2010 09:38 AM, Daniel P. Berrange wrote:
Since different event types can received different data in the callback, the API is defined with a generic callback. Specific events will each have a custom signature for their callback. Thus when registering an event it is neccessary to cast the callback to the generic signature
+/* A generic callback definition. Specific events usually have a customization + * with extra parameters */ +typedef void (*virConnectDomainEventGenericCallback)(virConnectPtr conn, + virDomainPtr dom, + void *opaque);
Should the callback be allowed to return anything, as void*? For example, I've seen some programming paradigms where you can write a generic iterator that marches through callbacks for each item in a set, allowing an early abort of the iteration if any of the callbacks return a non-NULL value (useful for both finding the first element that matches a given criteria, and for gracefully aborting operations on first failure).
If these callbacks where synchronous with the operation causing them, then I'd agree we need a return value. All the domain events though are reporting something that has already happened, asychronously, so there's nothing that a callback could stop/abort for this. Regards, Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|