1218885Sdim//===- llvm/Support/Win32/Mutex.inc - Win32 Mutex Implementation -*- C++ -*-===//
2218885Sdim//
3218885Sdim//                     The LLVM Compiler Infrastructure
4218885Sdim//
5218885Sdim// This file is distributed under the University of Illinois Open Source
6218885Sdim// License. See LICENSE.TXT for details.
7218885Sdim//
8218885Sdim//===----------------------------------------------------------------------===//
9218885Sdim//
10218885Sdim// This file implements the Win32 specific (non-pthread) Mutex class.
11218885Sdim//
12218885Sdim//===----------------------------------------------------------------------===//
13218885Sdim
14218885Sdim//===----------------------------------------------------------------------===//
15218885Sdim//=== WARNING: Implementation here must contain only generic Win32 code that
16218885Sdim//===          is guaranteed to work on *all* Win32 variants.
17218885Sdim//===----------------------------------------------------------------------===//
18218885Sdim
19218885Sdim#include "Windows.h"
20218885Sdim#include "llvm/Support/Mutex.h"
21218885Sdim
22218885Sdimnamespace llvm {
23218885Sdimusing namespace sys;
24218885Sdim
25218885SdimMutexImpl::MutexImpl(bool /*recursive*/)
26218885Sdim{
27218885Sdim  data_ = new CRITICAL_SECTION;
28218885Sdim  InitializeCriticalSection((LPCRITICAL_SECTION)data_);
29218885Sdim}
30218885Sdim
31218885SdimMutexImpl::~MutexImpl()
32218885Sdim{
33218885Sdim  DeleteCriticalSection((LPCRITICAL_SECTION)data_);
34218885Sdim  delete (LPCRITICAL_SECTION)data_;
35218885Sdim  data_ = 0;
36218885Sdim}
37218885Sdim
38218885Sdimbool
39218885SdimMutexImpl::acquire()
40218885Sdim{
41218885Sdim  EnterCriticalSection((LPCRITICAL_SECTION)data_);
42218885Sdim  return true;
43218885Sdim}
44218885Sdim
45218885Sdimbool
46218885SdimMutexImpl::release()
47218885Sdim{
48218885Sdim  LeaveCriticalSection((LPCRITICAL_SECTION)data_);
49218885Sdim  return true;
50218885Sdim}
51218885Sdim
52218885Sdimbool
53218885SdimMutexImpl::tryacquire()
54218885Sdim{
55218885Sdim  return TryEnterCriticalSection((LPCRITICAL_SECTION)data_);
56218885Sdim}
57218885Sdim
58218885Sdim}
59