let connect_file fqp_in =
let entry_info = try
Hashtbl.find direct_fifo_table fqp_in with _ -> None in
match entry_info with
| Some(_,execpath,slice_name,fifo_fdin) ->
begin
let len = String.length fqp_in in
let fqp = String.sub fqp_in 0 (len-3) in
let fqp_out = String.concat "." [fqp;"out"] in
let fifo_fdout =
try openfile fqp_out [O_WRONLY;O_NONBLOCK] 0o777 with
_->
sleep 1;try openfile fqp_out [O_WRONLY;O_NONBLOCK] 0o777 with
_->
logprint "%s Output pipe not open, using stdout in place of %s\n" slice_name fqp_out;stdout
in
ignore(sigprocmask SIG_BLOCK [Sys.sigchld]);
(
clear_nonblock fifo_fdin;
let pid=try Some(create_process execpath [|execpath;slice_name|] fifo_fdin fifo_fdout fifo_fdout) with e -> None in
match pid with
| Some(pid) ->
if (fifo_fdout <> stdout) then close_if_open fifo_fdout;
Hashtbl.add pidmap pid (fqp_in,fifo_fdout)
| None ->logprint "Error executing service: %s\n" execpath;reopenentry fqp_in
);
ignore(sigprocmask SIG_UNBLOCK [Sys.sigchld]);
end
| None -> ()