add -fPIC option to the C compiler, required in f31
[vsys.git] / frontend.ml
index 56d1d9f..cf53b9b 100644 (file)
@@ -4,6 +4,7 @@ open Printf
 open Unix
 open Globals
 open Directfifowatcher
+open Unixsocketwatcher
 
 (** frontendhandler class: Methods to create and unlink pipes and directories 
   @param root_dir vsys directory inside a slice
@@ -12,9 +13,16 @@ class frontendHandler (root_dir,slice_name) =
 object(this)
 
   (** regex indicating that the script passes fds around *)
-  val fd_regex = Str.regexp "^fd_"
+  val fd_regex = Str.regexp "fd_"
+
+  method is_fd_passer fname = 
+    try let _ = Str.search_forward fd_regex fname 0 
+    in 
+      true
+    with
+      | Not_found -> false 
+      | _ -> false
 
-  method is_fd_passer fname = Str.string_match fd_regex fname 0
   method get_slice_name () = slice_name
   (** A new script was copied into the backend, make a corresponding entry in
     the frontend.
@@ -25,12 +33,12 @@ object(this)
     let realperm = perm land (lnot 0o111) in
       match rp with Relpath(rel) ->
         let fqp = String.concat "/" [root_dir;rel] in
-          if (is_fd_passer rel) then
+          if (this#is_fd_passer rel) then
             let res = Unixsocketwatcher.mkentry fqp abspath realperm slice_name in
               begin
                 match res with
                   | Success ->
-                      Unixsocketwatcher.openentry root_dir fqp (abspath, slice_name)
+                      ()
                   | _ -> 
                       logprint "Could not create entry %s" abspath
               end
@@ -76,12 +84,25 @@ object(this)
       let fqp = String.concat "/" [root_dir;rel] in
       let fqp_in = String.concat "." [fqp;"in"] in
       let fqp_out = String.concat "." [fqp;"out"] in
-        Directfifowatcher.closeentry fqp;
-        try 
-          Unix.unlink fqp_in;
-          Unix.unlink fqp_out
-        with _ ->
-          logprint "Hm. %s disappeared. Looks like slice %s shot itself in the foot\n" fqp (this#get_slice_name ())
+      let fqp_control = String.concat "." [fqp;"out"] in
+
+        if (this#is_fd_passer rel) then
+          begin
+            Unixsocketwatcher.closeentry fqp;
+            try 
+              Unix.unlink fqp_control
+            with _ ->
+              logprint "Hm. %s disappeared. Looks like slice %s shot itself in the foot\n" fqp (this#get_slice_name ())
+          end
+        else
+          begin
+            Directfifowatcher.closeentry fqp;
+            try 
+              Unix.unlink fqp_in;
+              Unix.unlink fqp_out
+            with _ ->
+              logprint "Hm. %s disappeared. Looks like slice %s shot itself in the foot\n" fqp (this#get_slice_name ())
+          end
 
   method rmdir rp =
     match rp with Relpath(rel) ->