(* $Id: netmcore_camlbox.ml 1803 2012-10-18 23:44:51Z gerd $ *)
open Netcamlbox
open Netmcore
open Printf
let create_camlbox prefix n size =
let (fd, name) =
Netsys_posix.shm_create ("/" ^ prefix) 0 in
let fd_open = ref true in
try
assert(name.[0] = '/');
let name1 = String.sub name 1 (String.length name-1) in
let box =
format_camlbox name1 fd n size in
Unix.close fd;
fd_open := false;
let res = manage_shm name in
(box, res#id)
with
| error ->
if !fd_open then (
(* Apparently, "Unix.close fd" is rejected on OS X when the shm
has not been ftruncated. So just try that.
*)
(try Unix.ftruncate fd 0 with _ -> ());
Unix.close fd;
);
raise error
let lookup_camlbox_address res_id =
let name = get_shm res_id in
assert(name.[0] = '/');
String.sub name 1 (String.length name - 1)
let lookup_camlbox_sender res_id =
let addr = lookup_camlbox_address res_id in
camlbox_sender addr