diff --git a/lib/JITClient/JITManager.cpp b/lib/JITClient/JITManager.cpp index 81bc5c74291..b5923208d8c 100644 --- a/lib/JITClient/JITManager.cpp +++ b/lib/JITClient/JITManager.cpp @@ -226,20 +226,17 @@ JITManager::IsOOPJITEnabled() const HRESULT JITManager::ConnectRpcServer(__in HANDLE jitProcessHandle, __in_opt void* serverSecurityDescriptor, __in UUID connectionUuid) { + // We might be trying to connect from multiple threads simultaneously + AutoCriticalSection cs(&m_cs); + Assert(IsOOPJITEnabled()); - if(m_rpcBindingHandle != nullptr) + if (m_rpcBindingHandle != nullptr) { - // TODO: change this to allow connecting a new JIT process to new ThreadContexts - return E_FAIL; + return S_OK; } HRESULT hr = E_FAIL; - if (IsConnected()) - { - Assert(UNREACHED); - return E_FAIL; - } hr = CreateBinding(jitProcessHandle, serverSecurityDescriptor, &connectionUuid, &m_rpcBindingHandle); if (FAILED(hr)) diff --git a/lib/JITClient/JITManager.h b/lib/JITClient/JITManager.h index 9ab4eac396b..699424b2dfb 100644 --- a/lib/JITClient/JITManager.h +++ b/lib/JITClient/JITManager.h @@ -140,6 +140,7 @@ class JITManager bool m_oopJitEnabled; bool m_isJITServer; HRESULT m_failingHRESULT; + CriticalSection m_cs; static JITManager s_jitManager;