~ubuntu-branches/ubuntu/feisty/clamav/feisty

« back to all changes in this revision

Viewing changes to libclamav/c++/llvm/lib/System/Threading.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Kees Cook
  • Date: 2007-02-20 10:33:44 UTC
  • mto: This revision was merged to the branch mainline in revision 16.
  • Revision ID: james.westby@ubuntu.com-20070220103344-zgcu2psnx9d98fpa
Tags: upstream-0.90
ImportĀ upstreamĀ versionĀ 0.90

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
//===-- llvm/System/Threading.cpp- Control multithreading mode --*- C++ -*-==//
2
 
//
3
 
//                     The LLVM Compiler Infrastructure
4
 
//
5
 
// This file is distributed under the University of Illinois Open Source
6
 
// License. See LICENSE.TXT for details.
7
 
//
8
 
//===----------------------------------------------------------------------===//
9
 
//
10
 
// This file implements llvm_start_multithreaded() and friends.
11
 
//
12
 
//===----------------------------------------------------------------------===//
13
 
 
14
 
#include "llvm/System/Threading.h"
15
 
#include "llvm/System/Atomic.h"
16
 
#include "llvm/System/Mutex.h"
17
 
#include "llvm/Config/config.h"
18
 
#include <cassert>
19
 
 
20
 
using namespace llvm;
21
 
 
22
 
static bool multithreaded_mode = false;
23
 
 
24
 
static sys::Mutex* global_lock = 0;
25
 
 
26
 
bool llvm::llvm_start_multithreaded() {
27
 
#ifdef LLVM_MULTITHREADED
28
 
  assert(!multithreaded_mode && "Already multithreaded!");
29
 
  multithreaded_mode = true;
30
 
  global_lock = new sys::Mutex(true);
31
 
  
32
 
  // We fence here to ensure that all initialization is complete BEFORE we
33
 
  // return from llvm_start_multithreaded().
34
 
  sys::MemoryFence();
35
 
  return true;
36
 
#else
37
 
  return false;
38
 
#endif
39
 
}
40
 
 
41
 
void llvm::llvm_stop_multithreaded() {
42
 
#ifdef LLVM_MULTITHREADED
43
 
  assert(multithreaded_mode && "Not currently multithreaded!");
44
 
  
45
 
  // We fence here to insure that all threaded operations are complete BEFORE we
46
 
  // return from llvm_stop_multithreaded().
47
 
  sys::MemoryFence();
48
 
  
49
 
  multithreaded_mode = false;
50
 
  delete global_lock;
51
 
#endif
52
 
}
53
 
 
54
 
bool llvm::llvm_is_multithreaded() {
55
 
  return multithreaded_mode;
56
 
}
57
 
 
58
 
void llvm::llvm_acquire_global_lock() {
59
 
  if (multithreaded_mode) global_lock->acquire();
60
 
}
61
 
 
62
 
void llvm::llvm_release_global_lock() {
63
 
  if (multithreaded_mode) global_lock->release();
64
 
}