소스 검색

fix child pipe in process_start

jason 1 년 전
부모
커밋
baacc512e3
1개의 변경된 파일6개의 추가작업 그리고 6개의 파일을 삭제
  1. 6 6
      core/os/os2/process_linux.odin

+ 6 - 6
core/os/os2/process_linux.odin

@@ -388,6 +388,11 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) {
 		env = &cenv[0]
 	}
 
+	child_pipe_fds: [2]linux.Fd
+	if errno = linux.pipe2(&child_pipe_fds, {.CLOEXEC}); errno != .NONE {
+		return process, _get_platform_error(errno)
+	}
+
 	// TODO: This is the traditional textbook implementation with fork.
 	//       A more efficient implementation with vfork:
 	//
@@ -412,15 +417,10 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) {
 	READ :: 0
 	WRITE :: 1
 
-	child_pipe_fds: [2]linux.Fd
-	if errno = linux.pipe2(&child_pipe_fds, {.CLOEXEC}); errno != .NONE {
-		return process, _get_platform_error(errno)
-	}
-
 	if pid == 0 {
 		// in child process now
 		write_errno_to_parent_and_abort :: proc(parent_fd: linux.Fd, errno: linux.Errno) -> ! {
-			error_byte: [1]u8 = { u8(i32(errno) * -1) }
+			error_byte: [1]u8 = { u8(errno) }
 			linux.write(parent_fd, error_byte[:])
 			intrinsics.trap()
 		}