summaryrefslogtreecommitdiff
path: root/src/tools/clangbackend/clangbackendmain.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2018-11-23 11:28:10 +0100
committerNikolai Kosjar <nikolai.kosjar@qt.io>2018-11-26 09:49:25 +0000
commita4cf0ad109aa6d7a60cbcce2f4090bdc07d2f68d (patch)
tree260f8de9718a2489327ca90351f2e0ea8fcd43d5 /src/tools/clangbackend/clangbackendmain.cpp
parentb61d11a446ff50b604f3f0a6e458e04a0b774897 (diff)
downloadqt-creator-a4cf0ad109aa6d7a60cbcce2f4090bdc07d2f68d.tar.gz
Clang: Disable printing stack traces by default
Printing the stack strace in the event of a crash is very useful, but in the worst case it can also result in a deadlock, without any trace being printed, rendering the clangbackend completely useless. For example, if a thread allocates memory (lock) and another thread crashes right then, clang's stack trace printer is invoked, which (unfortunately) also tries to allocate memory (deadlock). This was observed with QTCREATORBUG-21559. The stack trace printer should be fixed in clang. Until then, disable printing stack traces by default and allow to enable when explicitly requested (QTC_CLANG_ENABLE_STACKTRACES=1). Task-number: QTCREATORBUG-21559 Change-Id: I418cea7f3d70bc8a9cae333b3858228650307c6e Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: Marco Bubke <marco.bubke@qt.io> Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/tools/clangbackend/clangbackendmain.cpp')
-rw-r--r--src/tools/clangbackend/clangbackendmain.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/tools/clangbackend/clangbackendmain.cpp b/src/tools/clangbackend/clangbackendmain.cpp
index d165ebb6dd..efe5970a4d 100644
--- a/src/tools/clangbackend/clangbackendmain.cpp
+++ b/src/tools/clangbackend/clangbackendmain.cpp
@@ -80,7 +80,9 @@ int main(int argc, char *argv[])
const QString connection = processArguments(application);
- clang_enableStackTraces();
+ // Printing the stack strace might dead lock as clang's stack printer allocates memory.
+ if (qEnvironmentVariableIntValue("QTC_CLANG_ENABLE_STACKTRACES"))
+ clang_enableStackTraces();
ClangCodeModelServer clangCodeModelServer;
ConnectionServer<ClangCodeModelServer, ClangCodeModelClientProxy> connectionServer;