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

Re: [Xen-devel] [PATCH 3/3] libxl: ocaml: use 'for_app_registration' in osevent callbacks



Rob Hoes writes ("Re: [PATCH 3/3] libxl: ocaml: use 'for_app_registration' in 
osevent callbacks"):
> I forgot to reply to this:
> 
> On 12 Dec 2013, at 17:40, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
> >> [...]
> >> +  for_app = malloc(sizeof(value));
> >> +  if (for_app) {
> >> +          *for_app = caml_callbackN(*func, 4, args);
> > 
> > Can the callbackN fail, eg. returning an exception or something?
> 
> Yes, it can:
> 
> "If the function f does not return, but raises an exception that escapes the 
> scope of the application, then this exception is propagated to the next 
> enclosing OCaml code, skipping over the C code. That is, if an OCaml function 
> f calls a C function g that calls back an OCaml function h that raises a 
> stray exception, then the execution of g is interrupted and the exception is 
> propagated back into f.” 
> [http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual033.html#toc148]

How alarming.  I think this will therefore skip over all the function
epilogue and leave various stuff (including stuff on the now-unwould
stack frame) wired into the ocaml gc.

And of course it will unwind past libxl, leaving the libxl ctx lock
held.

> It is possible to catch the exception in C, e.g.:
> 
> res = caml_callbackN_exn(*func, 4, args);
> if(Is_exception_result(res)) {
>         res = Extract_exception(res);
>         ...
> 
> Perhaps it makes sense to do this, and return ERROR_OSEVENT_REG_FAIL when we 
> catch an exception.

Yes, absolutely, you must do that.  Although the results are still not
going to be good.  In the worst case libxl will signal a disaster.

I didn't write in lixbl_event.h that the callbacks weren't allowed to
longjmp rather than returning because I thought it was obvious.

Ian.

_______________________________________________
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®.