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

Re: [Xen-devel] [PATCH 22/28] libxl: ocaml: event management



On 25/03/13 14:45, Rob Hoes wrote:
+void fd_deregister(void *user, int fd, void *for_app_registration)
+{
+       CAMLparam0();
+       CAMLlocalN(args, 2);
+       value *func = caml_named_value("fd_deregister");
+
+       args[0] = (value) user;
+       args[1] = Val_int(fd);
+
+       caml_callbackN(*func, 2, args);
+       CAMLreturn0;
+}

The OCaml manual[*] (S19.7.2) hints that the name lookup is a bit slow:

"The pointer returned by caml_named_value is constant and can safely be cached in a C variable to avoid repeated name lookups. On the other hand, the value pointed to can change during garbage collection and must always be recomputed at the point of use."

The manual suggests caching the value * in a static like this:

  void fd_deregister(void *user, int fd, void *for_app_registration)
  {
    CAMLparam0();
    CAMLlocalN(args, 2);
    static value * func = NULL;
    if (func == NULL) {
      /* First time around, look up by name */
      func = caml_named_value("fd_deregister");
    }
  ...


[*] http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual033.html

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