diff options
author | Enrico Tassi <Enrico.Tassi@inria.fr> | 2016-03-09 16:23:33 +0100 |
---|---|---|
committer | Enrico Tassi <Enrico.Tassi@inria.fr> | 2016-03-09 16:29:01 +0100 |
commit | cebc677e01c64c4a3f7081f85e37f3b61a112b68 (patch) | |
tree | aa286631cfb2b89d0d42f7c5b1321033cf497602 /lib | |
parent | a5ae3b2856e6cc6683652a0abb5a84b9787527c0 (diff) |
Win: kill unreliable hence do not waitpid after kill -9 (Close #4369)
This commit also completes 74bd95d10b9f4cccb4bd5b855786c444492b201b
Diffstat (limited to 'lib')
-rw-r--r-- | lib/spawn.ml | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/lib/spawn.ml b/lib/spawn.ml index 4d35ded90..fda4b4239 100644 --- a/lib/spawn.ml +++ b/lib/spawn.ml @@ -220,10 +220,13 @@ let stats { oob_req; oob_resp; alive } = input_value oob_resp let rec wait p = - try snd (Unix.waitpid [] p.pid) - with - | Unix.Unix_error (Unix.EINTR, _, _) -> wait p - | Unix.Unix_error _ -> Unix.WEXITED 0o400 + (* On windows kill is not reliable, so wait may never return. *) + if Sys.os_type = "Unix" then + try snd (Unix.waitpid [] p.pid) + with + | Unix.Unix_error (Unix.EINTR, _, _) -> wait p + | Unix.Unix_error _ -> Unix.WEXITED 0o400 + else Unix.WEXITED 0o400 end @@ -267,8 +270,13 @@ let stats { oob_req; oob_resp; alive } = flush oob_req; let RespStats g = input_value oob_resp in g -let wait { pid = unixpid } = - try snd (Unix.waitpid [] unixpid) - with Unix.Unix_error _ -> Unix.WEXITED 0o400 +let rec wait p = + (* On windows kill is not reliable, so wait may never return. *) + if Sys.os_type = "Unix" then + try snd (Unix.waitpid [] p.pid) + with + | Unix.Unix_error (Unix.EINTR, _, _) -> wait p + | Unix.Unix_error _ -> Unix.WEXITED 0o400 + else Unix.WEXITED 0o400 end |