diff options
author | Simon Hafner <hafnersimon@gmail.com> | 2014-05-03 13:25:41 -0500 |
---|---|---|
committer | Simon Hafner <hafnersimon@gmail.com> | 2014-05-03 15:59:04 -0500 |
commit | 9428bedcc84bfc4cffca7014897410025e9fb658 (patch) | |
tree | ae6b4aba25aabeaa3ed95ef4187293eddd92ffcc /lib | |
parent | dfeb573edb5563f1ff6bfd30f1c3914a88565332 (diff) | |
download | Nim-9428bedcc84bfc4cffca7014897410025e9fb658.tar.gz |
Fixes #1168
Diffstat (limited to 'lib')
-rw-r--r-- | lib/system/ansi_c.nim | 3 | ||||
-rw-r--r-- | lib/system/excpt.nim | 10 |
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/system/ansi_c.nim b/lib/system/ansi_c.nim index 2d33965e3..5111bc3cf 100644 --- a/lib/system/ansi_c.nim +++ b/lib/system/ansi_c.nim @@ -57,6 +57,7 @@ when not defined(SIGINT): SIGINT = cint(2) SIGSEGV = cint(11) SIGTERM = cint(15) + SIGPIPE = cint(13) else: {.error: "SIGABRT not ported to your platform".} else: @@ -66,6 +67,8 @@ when not defined(SIGINT): SIGABRT {.importc: "SIGABRT", nodecl.}: cint SIGFPE {.importc: "SIGFPE", nodecl.}: cint SIGILL {.importc: "SIGILL", nodecl.}: cint + when defined(macosx) or defined(linux): + var SIGPIPE {.importc: "SIGPIPE", nodecl.}: cint when defined(macosx): when NoFakeVars: diff --git a/lib/system/excpt.nim b/lib/system/excpt.nim index 2dc134eaf..63a61183f 100644 --- a/lib/system/excpt.nim +++ b/lib/system/excpt.nim @@ -298,7 +298,13 @@ when not defined(noSignalHandler): elif s == SIGILL: action("SIGILL: Illegal operation.\n") elif s == SIGBUS: action("SIGBUS: Illegal storage access. (Attempt to read from nil?)\n") - else: action("unknown signal\n") + else: + block platformSpecificSignal: + when defined(SIGPIPE): + if s == SIGPIPE: + action("SIGPIPE: Pipe closed.\n") + break platformSpecificSignal + action("unknown signal\n") # print stack trace and quit when hasSomeStackTrace: @@ -323,6 +329,8 @@ when not defined(noSignalHandler): c_signal(SIGFPE, signalHandler) c_signal(SIGILL, signalHandler) c_signal(SIGBUS, signalHandler) + when defined(SIGPIPE): + c_signal(SIGPIPE, signalHandler) registerSignalHandler() # call it in initialization section |