blob: 583dc6359a161350b41b272ec80f812bb87f0b45 [file] [log] [blame]
Charles Davis53ca1f32010-11-29 19:44:50 +00001//===- llvm/Support/Win32/Mutex.inc - Win32 Mutex Implementation -*- C++ -*-===//
Michael J. Spencer1f6efa32010-11-29 18:16:10 +00002//
Reid Spencerb2164e52005-07-12 15:37:43 +00003// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Michael J. Spencer1f6efa32010-11-29 18:16:10 +00007//
Reid Spencerb2164e52005-07-12 15:37:43 +00008//===----------------------------------------------------------------------===//
9//
10// This file implements the Win32 specific (non-pthread) Mutex class.
11//
12//===----------------------------------------------------------------------===//
13
14//===----------------------------------------------------------------------===//
15//=== WARNING: Implementation here must contain only generic Win32 code that
16//=== is guaranteed to work on *all* Win32 variants.
17//===----------------------------------------------------------------------===//
18
Michael J. Spencer1f6efa32010-11-29 18:16:10 +000019#include "Windows.h"
20#include "llvm/Support/Mutex.h"
Jeff Cohen6d235222005-07-13 02:15:18 +000021
22namespace llvm {
Reid Spencerb2164e52005-07-12 15:37:43 +000023using namespace sys;
24
Owen Andersonb849a4d2009-06-18 17:53:17 +000025MutexImpl::MutexImpl(bool /*recursive*/)
Reid Spencerb2164e52005-07-12 15:37:43 +000026{
Jeff Cohen6d235222005-07-13 02:15:18 +000027 data_ = new CRITICAL_SECTION;
28 InitializeCriticalSection((LPCRITICAL_SECTION)data_);
Reid Spencerb2164e52005-07-12 15:37:43 +000029}
30
Owen Andersonb849a4d2009-06-18 17:53:17 +000031MutexImpl::~MutexImpl()
Reid Spencerb2164e52005-07-12 15:37:43 +000032{
Jeff Cohen6d235222005-07-13 02:15:18 +000033 DeleteCriticalSection((LPCRITICAL_SECTION)data_);
Jeff Cohen24972512005-07-13 02:58:04 +000034 delete (LPCRITICAL_SECTION)data_;
Jeff Cohen6d235222005-07-13 02:15:18 +000035 data_ = 0;
Reid Spencerb2164e52005-07-12 15:37:43 +000036}
37
Michael J. Spencer1f6efa32010-11-29 18:16:10 +000038bool
Owen Andersonb849a4d2009-06-18 17:53:17 +000039MutexImpl::acquire()
Reid Spencerb2164e52005-07-12 15:37:43 +000040{
Jeff Cohen6d235222005-07-13 02:15:18 +000041 EnterCriticalSection((LPCRITICAL_SECTION)data_);
42 return true;
Reid Spencerb2164e52005-07-12 15:37:43 +000043}
44
Michael J. Spencer1f6efa32010-11-29 18:16:10 +000045bool
Owen Andersonb849a4d2009-06-18 17:53:17 +000046MutexImpl::release()
Reid Spencerb2164e52005-07-12 15:37:43 +000047{
Jeff Cohen6d235222005-07-13 02:15:18 +000048 LeaveCriticalSection((LPCRITICAL_SECTION)data_);
49 return true;
Reid Spencerb2164e52005-07-12 15:37:43 +000050}
51
Michael J. Spencer1f6efa32010-11-29 18:16:10 +000052bool
Owen Andersonb849a4d2009-06-18 17:53:17 +000053MutexImpl::tryacquire()
Reid Spencerb2164e52005-07-12 15:37:43 +000054{
Jeff Cohen6d235222005-07-13 02:15:18 +000055 return TryEnterCriticalSection((LPCRITICAL_SECTION)data_);
Reid Spencerb2164e52005-07-12 15:37:43 +000056}
57
58}