From bd58a2c0c20be5b28ae35dcce30fbc096a610e3a Mon Sep 17 00:00:00 2001 From: "H. S. Teoh" Date: Tue, 13 May 2014 13:14:34 -0700 Subject: [PATCH] Ugly hack to work around signal handler nothrow issue. --- terminal.d | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/terminal.d b/terminal.d index 601fb48..46a9ece 100644 --- a/terminal.d +++ b/terminal.d @@ -28,20 +28,42 @@ version(Posix) { version(with_eventloop) struct SignalFired {} - extern(C) - void sizeSignalHandler(int sigNumber) { - windowSizeChanged = true; - version(with_eventloop) { - import arsd.eventloop; - send(SignalFired()); + static if (__VERSION__ >= 2066UL) + { + extern(C) + void sizeSignalHandler(int sigNumber) nothrow { + windowSizeChanged = true; + version(with_eventloop) { + import arsd.eventloop; + try { send(SignalFired()); } catch {} + } + } + extern(C) + void interruptSignalHandler(int sigNumber) nothrow { + interrupted = true; + version(with_eventloop) { + import arsd.eventloop; + try { send(SignalFired()); } catch {} + } } } - extern(C) - void interruptSignalHandler(int sigNumber) { - interrupted = true; - version(with_eventloop) { - import arsd.eventloop; - send(SignalFired()); + else + { + extern(C) + void sizeSignalHandler(int sigNumber) { + windowSizeChanged = true; + version(with_eventloop) { + import arsd.eventloop; + send(SignalFired()); + } + } + extern(C) + void interruptSignalHandler(int sigNumber) { + interrupted = true; + version(with_eventloop) { + import arsd.eventloop; + send(SignalFired()); + } } } }