diff options
author | Jim Ingham <jingham@apple.com> | 2015-11-05 00:38:39 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2015-11-05 00:38:39 +0000 |
commit | 4d59a2c558b7fffe5dfb37ee2f8a2cfe425717be (patch) | |
tree | 510336eba1f73b31962fff50f6b00731c4fe88a7 | |
parent | 19678b1bef3de9aaa09c678d659d7fcc1e5da9fa (diff) |
LLDB needs a mutex around getopt_long_only() function calls to avoid multi-threading option parsing issues.
<rdar://problem/17052381>
git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@252111 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/lldb/Host/OptionParser.h | 3 | ||||
-rw-r--r-- | source/Host/common/OptionParser.cpp | 4 | ||||
-rw-r--r-- | source/Interpreter/Args.cpp | 9 |
3 files changed, 11 insertions, 5 deletions
diff --git a/include/lldb/Host/OptionParser.h b/include/lldb/Host/OptionParser.h index 5aa7db5d3..175a1973c 100644 --- a/include/lldb/Host/OptionParser.h +++ b/include/lldb/Host/OptionParser.h @@ -11,6 +11,7 @@ #define liblldb_OptionParser_h_ #include <string> +#include "lldb/Host/Mutex.h" struct option; @@ -38,7 +39,7 @@ public: eOptionalArgument }; - static void Prepare(); + static void Prepare(Mutex::Locker &locker); static void EnableError(bool error); diff --git a/source/Host/common/OptionParser.cpp b/source/Host/common/OptionParser.cpp index a91e764bf..a9784592a 100644 --- a/source/Host/common/OptionParser.cpp +++ b/source/Host/common/OptionParser.cpp @@ -16,8 +16,10 @@ using namespace lldb_private; void -OptionParser::Prepare() +OptionParser::Prepare(Mutex::Locker &locker) { + static Mutex g_mutex(Mutex::eMutexTypeNormal); + locker.Lock(g_mutex); #ifdef __GLIBC__ optind = 0; #else diff --git a/source/Interpreter/Args.cpp b/source/Interpreter/Args.cpp index 7c9f5c35e..81e6b0aa1 100644 --- a/source/Interpreter/Args.cpp +++ b/source/Interpreter/Args.cpp @@ -575,7 +575,8 @@ Args::ParseOptions (Options &options) } } } - OptionParser::Prepare(); + Mutex::Locker options_locker(NULL); + OptionParser::Prepare(options_locker); int val; while (1) { @@ -1189,7 +1190,8 @@ Args::ParseAliasOptions (Options &options, } } - OptionParser::Prepare(); + Mutex::Locker options_locker(NULL); + OptionParser::Prepare(options_locker); int val; while (1) { @@ -1366,7 +1368,8 @@ Args::ParseArgsForCompletion } } - OptionParser::Prepare(); + Mutex::Locker options_locker(NULL); + OptionParser::Prepare(options_locker); OptionParser::EnableError(false); int val; |