add unsetControlCHook to remove a Ctrl-C hook after it was set (#7267)

* add unsetControlCHook to remove a Ctrl-C hook after it was set

Adds the inverse proc to setControlCHook in order to lift a Ctrl-C
hook after it has been set.

* remove check for noSignalHandler in system/excpt.nim
This commit is contained in:
Vindaar
2019-01-10 13:44:44 +01:00
committed by Andreas Rumpf
parent d998cb58dd
commit 8e600b78ca
3 changed files with 10 additions and 0 deletions

View File

@@ -3458,6 +3458,10 @@ when not defined(JS): #and not defined(nimscript):
## allows you to override the behaviour of your application when CTRL+C
## is pressed. Only one such hook is supported.
when not defined(useNimRtl):
proc unsetControlCHook*()
## reverts a call to setControlCHook
proc writeStackTrace*() {.tags: [], gcsafe.}
## writes the current stack trace to ``stderr``. This is only works
## for debug builds. Since it's usually used for debugging, this

View File

@@ -40,6 +40,7 @@ proc reraiseException() {.compilerRtl.} =
proc writeStackTrace() = discard
proc unsetControlCHook() = discard
proc setControlCHook(hook: proc () {.noconv.}) = discard
proc closureIterSetupExc(e: ref Exception) {.compilerproc, inline.} =

View File

@@ -536,3 +536,8 @@ proc setControlCHook(hook: proc () {.noconv.}) =
# ugly cast, but should work on all architectures:
type SignalHandler = proc (sign: cint) {.noconv, benign.}
c_signal(SIGINT, cast[SignalHandler](hook))
when not defined(useNimRtl):
proc unsetControlCHook() =
# proc to unset a hook set by setControlCHook
c_signal(SIGINT, signalHandler)