Replace Execution Engine's mutex with std::recursive_mutex.
This change has a bit of a trickle down effect due to the fact that there are a number of derived implementations of ExecutionEngine, and that the mutex is not tightly encapsulated so is used by other classes directly. Reviewed by: rnk Differential Revision: http://reviews.llvm.org/D4196 llvm-svn: 211214
This commit is contained in:
@@ -166,7 +166,7 @@ void *ExecutionEngineState::RemoveMapping(const GlobalValue *ToUnmap) {
|
||||
}
|
||||
|
||||
void ExecutionEngine::addGlobalMapping(const GlobalValue *GV, void *Addr) {
|
||||
MutexGuard locked(lock);
|
||||
std::lock_guard<std::recursive_mutex> locked(lock);
|
||||
|
||||
DEBUG(dbgs() << "JIT: Map \'" << GV->getName()
|
||||
<< "\' to [" << Addr << "]\n";);
|
||||
@@ -184,14 +184,14 @@ void ExecutionEngine::addGlobalMapping(const GlobalValue *GV, void *Addr) {
|
||||
}
|
||||
|
||||
void ExecutionEngine::clearAllGlobalMappings() {
|
||||
MutexGuard locked(lock);
|
||||
std::lock_guard<std::recursive_mutex> locked(lock);
|
||||
|
||||
EEState.getGlobalAddressMap().clear();
|
||||
EEState.getGlobalAddressReverseMap().clear();
|
||||
}
|
||||
|
||||
void ExecutionEngine::clearGlobalMappingsFromModule(Module *M) {
|
||||
MutexGuard locked(lock);
|
||||
std::lock_guard<std::recursive_mutex> locked(lock);
|
||||
|
||||
for (Module::iterator FI = M->begin(), FE = M->end(); FI != FE; ++FI)
|
||||
EEState.RemoveMapping(FI);
|
||||
@@ -201,7 +201,7 @@ void ExecutionEngine::clearGlobalMappingsFromModule(Module *M) {
|
||||
}
|
||||
|
||||
void *ExecutionEngine::updateGlobalMapping(const GlobalValue *GV, void *Addr) {
|
||||
MutexGuard locked(lock);
|
||||
std::lock_guard<std::recursive_mutex> locked(lock);
|
||||
|
||||
ExecutionEngineState::GlobalAddressMapTy &Map =
|
||||
EEState.getGlobalAddressMap();
|
||||
@@ -228,7 +228,7 @@ void *ExecutionEngine::updateGlobalMapping(const GlobalValue *GV, void *Addr) {
|
||||
}
|
||||
|
||||
void *ExecutionEngine::getPointerToGlobalIfAvailable(const GlobalValue *GV) {
|
||||
MutexGuard locked(lock);
|
||||
std::lock_guard<std::recursive_mutex> locked(lock);
|
||||
|
||||
ExecutionEngineState::GlobalAddressMapTy::iterator I =
|
||||
EEState.getGlobalAddressMap().find(GV);
|
||||
@@ -236,7 +236,7 @@ void *ExecutionEngine::getPointerToGlobalIfAvailable(const GlobalValue *GV) {
|
||||
}
|
||||
|
||||
const GlobalValue *ExecutionEngine::getGlobalValueAtAddress(void *Addr) {
|
||||
MutexGuard locked(lock);
|
||||
std::lock_guard<std::recursive_mutex> locked(lock);
|
||||
|
||||
// If we haven't computed the reverse mapping yet, do so first.
|
||||
if (EEState.getGlobalAddressReverseMap().empty()) {
|
||||
@@ -555,7 +555,7 @@ void *ExecutionEngine::getPointerToGlobal(const GlobalValue *GV) {
|
||||
if (Function *F = const_cast<Function*>(dyn_cast<Function>(GV)))
|
||||
return getPointerToFunction(F);
|
||||
|
||||
MutexGuard locked(lock);
|
||||
std::lock_guard<std::recursive_mutex> locked(lock);
|
||||
if (void *P = EEState.getGlobalAddressMap()[GV])
|
||||
return P;
|
||||
|
||||
@@ -1346,7 +1346,7 @@ ExecutionEngineState::ExecutionEngineState(ExecutionEngine &EE)
|
||||
: EE(EE), GlobalAddressMap(this) {
|
||||
}
|
||||
|
||||
sys::Mutex *
|
||||
std::recursive_mutex *
|
||||
ExecutionEngineState::AddressMapConfig::getMutex(ExecutionEngineState *EES) {
|
||||
return &EES->EE.lock;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user