aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlois Wohlschlager <alois1@gmx-topmail.de>2024-05-11 12:11:43 +0200
committerAlois Wohlschlager <alois1@gmx-topmail.de>2024-05-13 09:03:53 +0200
commit914b0febf77c91ae7f20d098f62a5feefc1acdc3 (patch)
tree183307950353a76966160744afd85772583dae6a /src
parentf6dc40cd1c3cdb38d104fb18ca76b9acf374190a (diff)
libutil: remove the interrupt-blocking code
The interrupt-blocking code was originally introduced 20 years ago so that trying to log an error message does not result in an interrupt exception being thrown and then going unhandled (c8d3882cdc8f9e22c58af285c1996265c1af75d5). However, the logging code does not check for interrupts any more (054be5025762c5e1c7e853c4fa5d7eed8da1727f), so this reasoning is no longer applicable. Delete this code so that later interrupts are unblocked again, for example in the next line entered into the repl. Closes: https://git.lix.systems/lix-project/lix/issues/296 Change-Id: I48253f5f4272e75001148c13046e709ef5427fbd
Diffstat (limited to 'src')
-rw-r--r--src/libmain/shared.cc11
-rw-r--r--src/libutil/signals.cc9
-rw-r--r--src/libutil/signals.hh2
3 files changed, 2 insertions, 20 deletions
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc
index 9d4dd41ed..96ecbac8f 100644
--- a/src/libmain/shared.cc
+++ b/src/libmain/shared.cc
@@ -320,16 +320,7 @@ int handleExceptions(const std::string & programName, std::function<void()> fun)
std::string error = ANSI_RED "error:" ANSI_NORMAL " ";
try {
- try {
- fun();
- } catch (...) {
- /* Subtle: we have to make sure that any `interrupted'
- condition is discharged before we reach printMsg()
- below, since otherwise it will throw an (uncaught)
- exception. */
- setInterruptThrown();
- throw;
- }
+ fun();
} catch (Exit & e) {
return e.status;
} catch (UsageError & e) {
diff --git a/src/libutil/signals.cc b/src/libutil/signals.cc
index f5c79b325..41fdc9dc8 100644
--- a/src/libutil/signals.cc
+++ b/src/libutil/signals.cc
@@ -9,21 +9,14 @@ namespace nix {
std::atomic<bool> _isInterrupted = false;
-static thread_local bool interruptThrown = false;
thread_local std::function<bool()> interruptCheck;
-void setInterruptThrown()
-{
- interruptThrown = true;
-}
-
void _interrupted()
{
/* Block user interrupts while an exception is being handled.
Throwing an exception while another exception is being handled
kills the program! */
- if (!interruptThrown && !std::uncaught_exceptions()) {
- interruptThrown = true;
+ if (!std::uncaught_exceptions()) {
throw Interrupted("interrupted by the user");
}
}
diff --git a/src/libutil/signals.hh b/src/libutil/signals.hh
index c58dc37cf..71593df95 100644
--- a/src/libutil/signals.hh
+++ b/src/libutil/signals.hh
@@ -22,8 +22,6 @@ extern std::atomic<bool> _isInterrupted;
extern thread_local std::function<bool()> interruptCheck;
-void setInterruptThrown();
-
void _interrupted();
void inline checkInterrupt()