Prechádzať zdrojové kódy

[lua] add checks for asynchronous process close()

Justin Donaldson 6 rokov pred
rodič
commit
458719ebd1
2 zmenil súbory, kde vykonal 27 pridanie a 8 odobranie
  1. 25 6
      std/lua/_std/sys/io/Process.hx
  2. 2 2
      std/lua/lib/luv/Stream.hx

+ 25 - 6
std/lua/_std/sys/io/Process.hx

@@ -89,8 +89,7 @@ class Process {
 
 		var opt = { args: setArgs(cmd, args), stdio : stdio };
 
-		var p : lua.lib.luv.Process.LuvSpawn;
-		p = lua.lib.luv.Process.spawn( _shell, opt, function(code : Int, signal : Signal){
+		var p = lua.lib.luv.Process.spawn( _shell, opt, function(code : Int, signal : Signal){
 			_code = code;
 		});
 
@@ -105,9 +104,9 @@ class Process {
 	}
 
 	public function close() : Void {
-		stdout.close();
-		stdin.close();
 		stderr.close();
+		stdin.close();
+		stdout.close();
 		_handle.close();
 	}
 
@@ -193,7 +192,17 @@ private class ProcessInput extends haxe.io.Input {
 	}
 
 	override public function close() {
-		b.close();
+		if (b.is_closing()){
+			return;
+		} else if (b.is_active()) {
+			b.shutdown((type, status)-> {
+				if (status != 0){
+					throw "Invalid shutdown";
+				} else {
+					b.close();
+				}
+			});
+		}
 	}
 }
 
@@ -210,7 +219,17 @@ private class ProcessOutput extends haxe.io.Output {
 	}
 
 	override public function close(){
-		b.close();
+		if (b.is_closing()){
+			return;
+		} else {
+			b.shutdown((type, status)-> {
+				if (status != 0){
+					throw "Invalid shutdown";
+				} else {
+					b.close();
+				}
+			});
+		}
 	}
 }
 

+ 2 - 2
std/lua/lib/luv/Stream.hx

@@ -20,12 +20,12 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
-package lua.lib.luv; 
+package lua.lib.luv;
 import lua.lib.luv.net.Tcp;
 
 @:luaRequire("luv")
 extern class Stream extends Handle {
-  function shutdown(?cb : Void->Void) : Int;
+  function shutdown(?cb : Dynamic->Int->Void) : Int;
   function listen(backlog : Int, cb : String->String->Void) : Int;
   function accept(client_stream : Stream) : Int;
   function read_start(cb : String->String->Void) : Int;