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

[Xen-API] [PATCH 3 of 6] CA-33440: Now that the direct fork code has been moved to stunnel, simplify the 'pidty' to only consider the single case of forking via the external daemon



# HG changeset patch
# User David Scott <dave.scott@xxxxxxxxxxxxx>
# Date 1261409809 0
# Node ID c77bc0262c68af492d0444eb61f52d1e6d6bd152
# Parent  6d735f8541855ebf3ab2b438e5c569d362e9d2de
CA-33440: Now that the direct fork code has been moved to stunnel, simplify the 
'pidty' to only consider the single case of forking via the external daemon.

Signed-off-by: David Scott <dave.scott@xxxxxxxxxxxxx>

diff -r 6d735f854185 -r c77bc0262c68 stdext/forkhelpers.ml
--- a/stdext/forkhelpers.ml     Mon Dec 21 15:36:49 2009 +0000
+++ b/stdext/forkhelpers.ml     Mon Dec 21 15:36:49 2009 +0000
@@ -25,27 +25,14 @@
 
 open Pervasiveext
 
-type pidty = 
-    | Stdfork of int (* We've forked and execed, and therefore need to waitpid 
*)
-    | FEFork of (Unix.file_descr * int) (* The forking executioner has been 
used, therefore we need to tell it to waitpid *)
-    | Nopid
+type pidty = (Unix.file_descr * int) (* The forking executioner has been used, 
therefore we need to tell *it* to waitpid *)
 
-let string_of_pidty p =
-  match p with
-    | Stdfork pid -> Printf.sprintf "(Stdfork %d)" pid
-    | FEFork (fd,pid) -> Printf.sprintf "(FEFork (%d,%d))" 
(Unixext.int_of_file_descr fd) pid
-    | Nopid -> "Nopid"
-
-let nopid = Nopid
+let string_of_pidty (fd, pid) = Printf.sprintf "(FEFork (%d,%d))" 
(Unixext.int_of_file_descr fd) pid
 
 exception Subprocess_failed of int
 exception Subprocess_killed of int
 
-let waitpid ty =
-  match ty with 
-    | Stdfork pid ->
-       Unix.waitpid [] pid
-    | FEFork (sock,pid) ->
+let waitpid (sock, pid) =
        let status = Fecomms.read_raw_rpc sock in
        Unix.close sock;
        begin match status with
@@ -53,26 +40,14 @@
          | Fe.Finished (Fe.WSIGNALED n) -> (pid,Unix.WSIGNALED n)
          | Fe.Finished (Fe.WSTOPPED n) -> (pid,Unix.WSTOPPED n)
        end
-    | Nopid -> failwith "Can't waitpid without a process"
 
-let waitpid_nohang ty =
-  match ty with
-    | Stdfork pid ->
-       Unix.waitpid [Unix.WNOHANG] pid 
-    | FEFork (sock,pid) ->
+let waitpid_nohang ((sock, _) as x) =
        (match Unix.select [sock] [] [] 0.0 with
-         | ([s],_,_) -> waitpid ty
+         | ([s],_,_) -> waitpid x
          | _ -> (0,Unix.WEXITED 0))
-    | Nopid -> 
-       failwith "Can't waitpid without a pid"
          
-let dontwaitpid ty =
-  match ty with
-    | Stdfork pid ->
-       failwith "Can't do this!"
-    | FEFork (sock,pid) -> 
+let dontwaitpid (sock, pid) =
        Unix.close sock
-    | Nopid -> ()
 
 
 let waitpid_fail_if_bad_exit ty =
@@ -83,11 +58,7 @@
     | (Unix.WSIGNALED n) -> raise (Subprocess_killed n)
     | (Unix.WSTOPPED n) -> raise (Subprocess_killed n)
 
-let getpid ty =
-  match ty with
-    | Stdfork pid -> pid
-    | FEFork (sock,pid) -> pid
-    | Nopid -> failwith "No pid!"
+let getpid (sock, pid) = pid
 
 type 'a result = Success of string * 'a | Failure of string * exn
 
@@ -180,7 +151,7 @@
     List.iter (fun (uuid,srcfd) ->
       send_named_fd uuid srcfd) fds;
     Fecomms.write_raw_rpc sock Fe.Exec;
-    match Fecomms.read_raw_rpc sock with Fe.Execed pid -> FEFork (sock, pid))
+    match Fecomms.read_raw_rpc sock with Fe.Execed pid -> (sock, pid))
    
     close_fds
 
@@ -188,7 +159,7 @@
 let execute_command_get_output ?(cb_set=(fun _ -> ())) ?(cb_clear=(fun () -> 
())) cmd args =
   match with_logfile_fd "execute_command_get_out" (fun out_fd ->
     with_logfile_fd "execute_command_get_err" (fun err_fd ->
-      let FEFork (sock,pid) = safe_close_and_exec None (Some out_fd) (Some 
err_fd) [] cmd args in
+      let (sock,pid) = safe_close_and_exec None (Some out_fd) (Some err_fd) [] 
cmd args in
       match Fecomms.read_raw_rpc sock with
        | Fe.Finished x -> Unix.close sock; x
        | _ -> Unix.close sock; failwith "Communications error"     
diff -r 6d735f854185 -r c77bc0262c68 stdext/forkhelpers.mli
--- a/stdext/forkhelpers.mli    Mon Dec 21 15:36:49 2009 +0000
+++ b/stdext/forkhelpers.mli    Mon Dec 21 15:36:49 2009 +0000
@@ -30,8 +30,6 @@
 
 val string_of_pidty : pidty -> string
 
-val nopid : pidty
-
 (** Safe function which forks a command, closing all fds except a whitelist and
     having performed some fd operations in the child *)
 val safe_close_and_exec : ?env:string array -> Unix.file_descr option -> 
Unix.file_descr option -> Unix.file_descr option -> (string * Unix.file_descr) 
list -> string -> string list -> pidty
2 files changed, 9 insertions(+), 40 deletions(-)
stdext/forkhelpers.ml  |   47 +++++++++--------------------------------------
stdext/forkhelpers.mli |    2 --


Attachment: xen-api-libs.hg-6.patch
Description: Text Data

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.