From 9f905b84d5d4f938504fe1af691cf6f55fa94dc5 Mon Sep 17 00:00:00 2001 From: Juerd Waalboer Date: Tue, 2 Jul 2019 04:38:21 +0200 Subject: [PATCH] Abort transaction on SIGINT --- plugins/sigint | 9 ++++++++- revbank | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/plugins/sigint b/plugins/sigint index e6ce669..9755d21 100755 --- a/plugins/sigint +++ b/plugins/sigint @@ -2,4 +2,11 @@ sub command { NEXT } -$SIG{INT} = 'IGNORE'; +$SIG{INT} = sub { + $::ABORT_HACK = "^C"; + + # DO NOT USE this global variable. It's a nasty hack. In most cases, + # you should "return ABORT" instead, or maybe "main::abort()" when doing + # nastier stuff. You should only need $::ABORT_HACK in signal handlers. +}; + diff --git a/revbank b/revbank index 7c0c1ac..27f868d 100755 --- a/revbank +++ b/revbank @@ -67,6 +67,13 @@ sub prompt { my $begin = my $time = time; while (not $done) { + if ($::ABORT_HACK) { + # Global variable that a signal handling plugin can set. + # Do not use, but "return ABORT" instead. + my $reason = $::ABORT_HACK; + $::ABORT_HACK = 0; + abort($reason); + } if ($select->can_read(.05)) { $readline->callback_read_char; $begin = $time;