-
Notifications
You must be signed in to change notification settings - Fork 554
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
... to avoid hang when calling StopSingular(). See also <oscar-system/Oscar.jl#4136>
- Loading branch information
Showing
1 changed file
with
43 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
From 2253127bd7648a4f2dba3e2e800a0cbcb818c918 Mon Sep 17 00:00:00 2001 | ||
From: Max Horn <[email protected]> | ||
Date: Tue, 24 Sep 2024 22:27:09 +0200 | ||
Subject: [PATCH] kernel: wait for child process to die before closing pty | ||
|
||
--- | ||
src/iostream.c | 10 ++++++---- | ||
1 file changed, 6 insertions(+), 4 deletions(-) | ||
|
||
diff --git a/src/iostream.c b/src/iostream.c | ||
index 18db09901..68bdf6a4d 100644 | ||
--- a/src/iostream.c | ||
+++ b/src/iostream.c | ||
@@ -1007,13 +1007,11 @@ static Obj FuncSIGNAL_CHILD_IOSTREAM(Obj self, Obj stream, Obj sig) | ||
static Obj FuncCLOSE_PTY_IOSTREAM(Obj self, Obj stream) | ||
{ | ||
UInt pty = HashLockStreamIfAvailable(stream); | ||
+ int status, retcode; | ||
|
||
// Close down the child | ||
- int status; | ||
kill(PtyIOStreams[pty].childPID, SIGTERM); | ||
- int retcode = close(PtyIOStreams[pty].ptyFD); | ||
- if (retcode) | ||
- Pr("Strange close return code %d\n", retcode, 0); | ||
+ | ||
// GAP (or another library) might wait on this PID before | ||
// we handle it. If that happens, waitpid will return -1. | ||
retcode = waitpid(PtyIOStreams[pty].childPID, &status, WNOHANG); | ||
@@ -1028,6 +1026,10 @@ static Obj FuncCLOSE_PTY_IOSTREAM(Obj self, Obj stream) | ||
retcode = waitpid(PtyIOStreams[pty].childPID, &status, 0); | ||
} | ||
|
||
+ retcode = close(PtyIOStreams[pty].ptyFD); | ||
+ if (retcode) | ||
+ Pr("Strange close return code %d\n", retcode, 0); | ||
+ | ||
PtyIOStreams[pty].inuse = 0; | ||
|
||
FreeStream(pty); | ||
-- | ||
2.46.0 | ||
|