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

[Xen-API] Re: Xen-API C Bindings, version 0.4.1



On Thu, Aug 10, 2006 at 10:10:56PM -0400, Sean Dague wrote:

> On Thu, Aug 10, 2006 at 11:55:16AM +0100, Ewan Mellor wrote:
>
> [Snip]
>
> > OK, how's this:
> > 
> > I think that it's important to treat all return values the same, because I
> > want someone to be able to look at the Xen API document, the
> > language-independent one, and for them to be able to infer how the C API
> > should look.  Further, I worry about the case where a value doesn't have a
> > reasonable sentinel, such as an integer that can reasonably take any value 
> > in
> > the range.
> > 
> > Therefore, rather than
> > 
> > uint64_t result = xen_vm_get_thingy(session, param1, ..., paramn);
> > if (!session->ok) {
> >   // error handling
> > }
> 
> Based solely on grossness, the above makes me sort of ill.  It also means
> there would need to be some interesting locking on the session object if it
> is going to be thread safe.

Session objects _definitely_ aren't thread-safe.  If you want a multithreaded
client with a session pool or suchlike, then you need to impose a
coarse-grained lock around the session, so that you only use it from one
thread at a time.

> I don't like it.

That seems to be a common theme ;-)

> > how about we have instead
> > 
> > uint64_t result;
> > if (!xen_vm_get_thingy(session, &result, param1, ..., paramn))
> > {
> >   // error handling
> > }
> 
> While a little awkward, it is the very Cish way to do things.  It is
> especially important that any input params require the caller to manage the
> memory, otherwise things get nasty very quickly
> 
> > Personally, my choice would be for the first, but if the weight of the world
> > is against me, I can yield ;-)
> > 
> > This second form is no more complicated, so I can change the bindings over.
> > In particular, this means that there will be no remote call that returns 
> > void,
> > which is the thing that the Daniels didn't like.  Calls to the server that
> > return no result look like this instead:
> > 
> > if (!xen_vm_do_something(session, param1, ..., paramn))
> > {
> >   // Call failed
> > }
> > 
> > How's that for an alternative?
> 
> Yes, much better. :)

Consider it done!

Ewan.

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-api


 


Rackspace

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