[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3-RESEND 24/28] libxl: ocaml: add VM lifecycle operations
> On Mon, 2013-10-21 at 14:32 +0100, Rob Hoes wrote: > > > +static int domain_wait_event(libxl_ctx *ctx, int domid, libxl_event > > +**event_r) > > Do you not have the infrastructure in place to bind this to ocaml and do the > next level of the call chain in ocaml instead of C? It turns out that we are not actually using this anymore in our code, nor the wait_shutdown function introduced in this patch. We already have the lower-level event functionality implemented. I'll remove these from the patch. > > +{ > > + int ret; > > + for (;;) { > > + ret = libxl_event_wait(ctx, event_r, LIBXL_EVENTMASK_ALL, > 0,0); > > + if (ret) { > > + return ret; > > + } > > + if ((*event_r)->domid != domid) { > > + libxl_event_free(CTX, *event_r); > > + continue; > > + } > > + return ret; > > + } > > +} > > + > > +value stub_libxl_domain_create_new(value ctx, value domain_config, > > +value async, value unit) { > > [...] > > + libxl_asyncop_how ao_how; > > + > > + if (async != Val_none) { > > + ao_how.callback = async_callback; > > + ao_how.u.for_callback = (void *) Some_val(async); > > + } > [...] > > + async != Val_none ? &ao_how : NULL, NULL); > > Lots of this patten. What about > #define OCAML_ASYNC_HOW \ > libxl_asyncop_how _ao_how; \ > libxl_asyncop_how *ao_how = NULL; \ > if (async != Val_none) \ > _ao_how.callback = ... > _ao_how.u.for_callback = ... > ao_how = &_ao_how > > Then an unconditional ao_how at the point of use? > > This relies on this file being compiled to allow mixed code and variable > definitions. We do that for libxl itself, not sure about here. Could be > enabled. > > Or at least the initialisation of ao_how could be made a function. > Perhaps > static value Val_oahow(value aohow struct aohow *c_aohow) > { > if (aohow == Val_none) return NULL; > > c_aohow->etc > return c_aohow > } > > then > libxl_aohow aohow; > > libxl_do_foo(.... > Val_aohow(async, &aohow), ...); Yes, we should really separate this out indeed. I'll do that now. Rob > > +value stub_libxl_domain_wait_shutdown(value ctx, value domid) { > > This is the thing I meant could you do in ocaml above... > > > + CAMLparam2(ctx, domid); > > + int ret; > > + libxl_event *event; > > + libxl_evgen_domain_death *deathw; > > + ret = libxl_evenable_domain_death(CTX, Int_val(domid), 0, > &deathw); > > + if (ret) > > + failwith_xl(ret, "domain_wait_shutdown"); > > + > > + for (;;) { > > + ret = domain_wait_event(CTX, Int_val(domid), &event); > > + if (ret) { > > + libxl_evdisable_domain_death(CTX, deathw); > > + failwith_xl(ret, "domain_wait_shutdown"); > > + } > > + > > + switch (event->type) { > > + case LIBXL_EVENT_TYPE_DOMAIN_DEATH: > > + goto done; > > + case LIBXL_EVENT_TYPE_DOMAIN_SHUTDOWN: > > + goto done; > > + default: > > + break; > > + } > > + libxl_event_free(CTX, event); > > + } > > +done: > > + libxl_event_free(CTX, event); > > I don't know, but this might be clearer with > the_right-type type = event->type; > lbixl_event_free(...) > before the switch, which then becomes switch(type)? > > Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |