fix #17749 ignore SIGPIPE signals, fix nim CI #17748 (#17752)

* fix #17749 SIGPIPE

* fix for windows
This commit is contained in:
Timothee Cour
2021-04-18 06:34:29 -07:00
committed by GitHub
parent ca3fe63bab
commit 42c6eec4ef
5 changed files with 57 additions and 17 deletions

View File

@@ -206,8 +206,8 @@ else: # main driver
var line = newStringOfCap(120)
while true:
if outp.readLine(line):
result[0].string.add(line.string)
result[0].string.add("\n")
result[0].add(line)
result[0].add("\n")
else:
result[1] = peekExitCode(p)
if result[1] != -1: break
@@ -279,3 +279,22 @@ else: # main driver
when defined(posix):
doAssert execCmdEx("echo $FO", env = newStringTable({"FO": "B"})) == ("B\n", 0)
doAssert execCmdEx("echo $PWD", workingDir = "/") == ("/\n", 0)
block: # bug #17749
let output = compileNimProg("-d:case_testfile4", "D20210417T011153")
var p = startProcess(output, dir)
let inp = p.inputStream
var count = 0
when defined(windows):
# xxx we should make osproc.hsWriteData raise IOError on windows, consistent
# with posix; we could also (in addition) make IOError a subclass of OSError.
type SIGPIPEError = OSError
else:
type SIGPIPEError = IOError
doAssertRaises(SIGPIPEError):
for i in 0..<100000:
count.inc
inp.writeLine "ok" # was giving SIGPIPE and crashing
doAssert count >= 100
doAssert waitForExit(p) == QuitFailure
close(p) # xxx isn't that missing in other places?

View File

@@ -11,10 +11,13 @@ proc main() =
discard posix.raise(signal)
else:
# synchronize this list with lib/system/except.nim:registerSignalHandler()
let fatalSigs = [SIGINT, SIGSEGV, SIGABRT, SIGFPE, SIGILL, SIGBUS,
SIGPIPE]
for s in fatalSigs:
let sigs = [SIGINT, SIGSEGV, SIGABRT, SIGFPE, SIGILL, SIGBUS, SIGPIPE]
for s in sigs:
let (_, exitCode) = execCmdEx(quoteShellCommand [getAppFilename(), $s])
doAssert exitCode == 128 + s, "mismatched exit code for signal " & $s
if s == SIGPIPE:
# SIGPIPE should be ignored
doAssert exitCode == 0, $(exitCode, s)
else:
doAssert exitCode == 128+s, $(exitCode, s)
main()