1*9880d681SAndroid Build Coastguard Worker//===- llvm/Support/Win32/Mutex.inc - Win32 Mutex Implementation -*- C++ -*-===// 2*9880d681SAndroid Build Coastguard Worker// 3*9880d681SAndroid Build Coastguard Worker// The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker// 5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker// 8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker// 10*9880d681SAndroid Build Coastguard Worker// This file implements the Win32 specific (non-pthread) Mutex class. 11*9880d681SAndroid Build Coastguard Worker// 12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 15*9880d681SAndroid Build Coastguard Worker//=== WARNING: Implementation here must contain only generic Win32 code that 16*9880d681SAndroid Build Coastguard Worker//=== is guaranteed to work on *all* Win32 variants. 17*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker#include "WindowsSupport.h" 20*9880d681SAndroid Build Coastguard Worker#include "llvm/Support/Mutex.h" 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workernamespace llvm { 23*9880d681SAndroid Build Coastguard Workerusing namespace sys; 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard WorkerMutexImpl::MutexImpl(bool /*recursive*/) 26*9880d681SAndroid Build Coastguard Worker{ 27*9880d681SAndroid Build Coastguard Worker data_ = new CRITICAL_SECTION; 28*9880d681SAndroid Build Coastguard Worker InitializeCriticalSection((LPCRITICAL_SECTION)data_); 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard WorkerMutexImpl::~MutexImpl() 32*9880d681SAndroid Build Coastguard Worker{ 33*9880d681SAndroid Build Coastguard Worker DeleteCriticalSection((LPCRITICAL_SECTION)data_); 34*9880d681SAndroid Build Coastguard Worker delete (LPCRITICAL_SECTION)data_; 35*9880d681SAndroid Build Coastguard Worker data_ = 0; 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerbool 39*9880d681SAndroid Build Coastguard WorkerMutexImpl::acquire() 40*9880d681SAndroid Build Coastguard Worker{ 41*9880d681SAndroid Build Coastguard Worker EnterCriticalSection((LPCRITICAL_SECTION)data_); 42*9880d681SAndroid Build Coastguard Worker return true; 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerbool 46*9880d681SAndroid Build Coastguard WorkerMutexImpl::release() 47*9880d681SAndroid Build Coastguard Worker{ 48*9880d681SAndroid Build Coastguard Worker LeaveCriticalSection((LPCRITICAL_SECTION)data_); 49*9880d681SAndroid Build Coastguard Worker return true; 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerbool 53*9880d681SAndroid Build Coastguard WorkerMutexImpl::tryacquire() 54*9880d681SAndroid Build Coastguard Worker{ 55*9880d681SAndroid Build Coastguard Worker return TryEnterCriticalSection((LPCRITICAL_SECTION)data_); 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker} 59