aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid McFarland <davidm@hb-studios.com>2017-04-21 11:28:10 -0300
committerDavid McFarland <davidm@hb-studios.com>2017-04-21 11:28:14 -0300
commit804ac524891ead6aa70e27c093686b71391ea232 (patch)
treeb046be4ff1c5a88d4b404bea68bf01aaf28699a9
parentd35231ec6017d72492a23b882b9275a60e1737a6 (diff)
add helper function to set 'interruptThrown'
this fixes a linker failure on cygwin 64 due to some bad interaction between tls and shared libraries. see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64697
-rw-r--r--src/libmain/shared.cc2
-rw-r--r--src/libutil/util.cc7
-rw-r--r--src/libutil/util.hh2
3 files changed, 8 insertions, 3 deletions
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc
index 4747b9bf9..d6c1c0c9c 100644
--- a/src/libmain/shared.cc
+++ b/src/libmain/shared.cc
@@ -259,7 +259,7 @@ int handleExceptions(const string & programName, std::function<void()> fun)
condition is discharged before we reach printMsg()
below, since otherwise it will throw an (uncaught)
exception. */
- interruptThrown = true;
+ setInterruptThrown();
throw;
}
} catch (Exit & e) {
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 37dfccd06..88a2f752c 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -946,7 +946,12 @@ void closeOnExec(int fd)
bool _isInterrupted = false;
-thread_local bool interruptThrown = false;
+static thread_local bool interruptThrown = false;
+
+void setInterruptThrown()
+{
+ interruptThrown = true;
+}
void _interrupted()
{
diff --git a/src/libutil/util.hh b/src/libutil/util.hh
index 121423cda..ae40dcd4c 100644
--- a/src/libutil/util.hh
+++ b/src/libutil/util.hh
@@ -267,7 +267,7 @@ void closeOnExec(int fd);
extern bool _isInterrupted;
-extern thread_local bool interruptThrown;
+void setInterruptThrown();
void _interrupted();