LLDB needs a mutex around getopt_long_only() function calls to avoid multi-threading option parsing issues.

<rdar://problem/17052381>

llvm-svn: 252111
This commit is contained in:
Jim Ingham 2015-11-05 00:38:39 +00:00
parent ba19c6eed8
commit c77ce7b626
3 changed files with 11 additions and 5 deletions

View File

@ -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);

View File

@ -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

View File

@ -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;