[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] libxl and malloc failure (Re: Current LibXL Status)
graft 51 ^ thanks On Thu, 2016-02-18 at 18:15 +0000, Ian Jackson wrote: > Andrew Cooper writes ("Re: [Xen-devel] Current LibXL Status"): > > There really is a show-stopper, which I have stated before. > > > > Languages such as OCaml use -ENOMEM as a hint to run the garbage > > collector some more.ÂÂI expect Haskell is the same. > > This cannot possibly be true (if what you mean is that they use > ENOMEM[1] from malloc as such an indication).ÂÂIt would make it > impossible to write a correct binding to a normal C library. > > Typically C library which calls malloc will do so in the middle of its > execution.ÂÂEven if the library returns the resulting error up as > a distinguishable error code, you can't just make the same library > call again - it may have done half its work but not the other half. FWIW there is some code in the Ocaml runtime which raises an Out_of_memory exception in response to ENOMEM in C land (and from ocaml code in some circumstances too). The Unix module (which wraps standard Unix libc type APIs) looks to (when appropriate) reasonably consistently return errors as Unix_error(errno), that is handled generically so will include raising Unix_error(ENOMEM) as necessary. In principal it ought to be possible to write an ocaml program which correctly dealt with those (and similar ones from other lower level bindings), for example the interactive command line interpreter catches Out_of_memory (but not Unix_error) and calls the gc before iterating. (I did see one reference in a book which suggested Out_of_memory wasn't catcheable, but that appears to be out of date from what I can tell). So I suppose it ought to be possible to write an ocaml daemon which caught errors like these at the top level and aborted only the currently attempted operation without taking down the whole daemon process. How feasible that is in practice I can't say. This of course relies on all the C bindings correctly turning errors into exceptions and the semantics of your particular daemon allowing for abandoning things half way through (which I suppose is a relative of some kind to crash-only s/w). Ian. > > So I think you must be wrong. > > Ian. > > [1] NB that when malloc fails there is no -ENOMEM, only ENOMEM. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |