File: | libclamav/c++/llvm/lib/System/Mutex.cpp |
Location: | line 80, column 5 |
Description: | Value stored to 'errorcode' is never read |
1 | //===- Mutex.cpp - Mutual Exclusion Lock ------------------------*- 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 the llvm::sys::Mutex class. |
11 | // |
12 | //===----------------------------------------------------------------------===// |
13 | |
14 | #include "llvm/Config/config.h" |
15 | #include "llvm/System/Mutex.h" |
16 | |
17 | //===----------------------------------------------------------------------===// |
18 | //=== WARNING: Implementation here must contain only TRULY operating system |
19 | //=== independent code. |
20 | //===----------------------------------------------------------------------===// |
21 | |
22 | #if !defined(ENABLE_THREADS1) || ENABLE_THREADS1 == 0 |
23 | // Define all methods as no-ops if threading is explicitly disabled |
24 | namespace llvm { |
25 | using namespace sys; |
26 | MutexImpl::MutexImpl( bool recursive) { } |
27 | MutexImpl::~MutexImpl() { } |
28 | bool MutexImpl::acquire() { return true; } |
29 | bool MutexImpl::release() { return true; } |
30 | bool MutexImpl::tryacquire() { return true; } |
31 | } |
32 | #else |
33 | |
34 | #if defined(HAVE_PTHREAD_H1) && defined(HAVE_PTHREAD_MUTEX_LOCK1) |
35 | |
36 | #include <cassert> |
37 | #include <pthread.h> |
38 | #include <stdlib.h> |
39 | |
40 | namespace llvm { |
41 | using namespace sys; |
42 | |
43 | |
44 | // This variable is useful for situations where the pthread library has been |
45 | // compiled with weak linkage for its interface symbols. This allows the |
46 | // threading support to be turned off by simply not linking against -lpthread. |
47 | // In that situation, the value of pthread_mutex_init will be 0 and |
48 | // consequently pthread_enabled will be false. In such situations, all the |
49 | // pthread operations become no-ops and the functions all return false. If |
50 | // pthread_mutex_init does have an address, then mutex support is enabled. |
51 | // Note: all LLVM tools will link against -lpthread if its available since it |
52 | // is configured into the LIBS variable. |
53 | // Note: this line of code generates a warning if pthread_mutex_init is not |
54 | // declared with weak linkage. It's safe to ignore the warning. |
55 | static const bool pthread_enabled = true; |
56 | |
57 | // Construct a Mutex using pthread calls |
58 | MutexImpl::MutexImpl( bool recursive) |
59 | : data_(0) |
60 | { |
61 | if (pthread_enabled) |
62 | { |
63 | // Declare the pthread_mutex data structures |
64 | pthread_mutex_t* mutex = |
65 | static_cast<pthread_mutex_t*>(malloc(sizeof(pthread_mutex_t))); |
66 | pthread_mutexattr_t attr; |
67 | |
68 | // Initialize the mutex attributes |
69 | int errorcode = pthread_mutexattr_init(&attr); |
70 | assert(errorcode == 0)((errorcode == 0) ? static_cast<void> (0) : __assert_fail ("errorcode == 0", "llvm/lib/System/Mutex.cpp", 70, __PRETTY_FUNCTION__ )); |
71 | |
72 | // Initialize the mutex as a recursive mutex, if requested, or normal |
73 | // otherwise. |
74 | int kind = ( recursive ? PTHREAD_MUTEX_RECURSIVE : PTHREAD_MUTEX_NORMAL ); |
75 | errorcode = pthread_mutexattr_settype(&attr, kind); |
76 | assert(errorcode == 0)((errorcode == 0) ? static_cast<void> (0) : __assert_fail ("errorcode == 0", "llvm/lib/System/Mutex.cpp", 76, __PRETTY_FUNCTION__ )); |
77 | |
78 | #if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__) |
79 | // Make it a process local mutex |
80 | errorcode = pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_PRIVATEPTHREAD_PROCESS_PRIVATE); |
Value stored to 'errorcode' is never read | |
81 | #endif |
82 | |
83 | // Initialize the mutex |
84 | errorcode = pthread_mutex_init(mutex, &attr); |
85 | assert(errorcode == 0)((errorcode == 0) ? static_cast<void> (0) : __assert_fail ("errorcode == 0", "llvm/lib/System/Mutex.cpp", 85, __PRETTY_FUNCTION__ )); |
86 | |
87 | // Destroy the attributes |
88 | errorcode = pthread_mutexattr_destroy(&attr); |
89 | assert(errorcode == 0)((errorcode == 0) ? static_cast<void> (0) : __assert_fail ("errorcode == 0", "llvm/lib/System/Mutex.cpp", 89, __PRETTY_FUNCTION__ )); |
90 | |
91 | // Assign the data member |
92 | data_ = mutex; |
93 | } |
94 | } |
95 | |
96 | // Destruct a Mutex |
97 | MutexImpl::~MutexImpl() |
98 | { |
99 | if (pthread_enabled) |
100 | { |
101 | pthread_mutex_t* mutex = static_cast<pthread_mutex_t*>(data_); |
102 | assert(mutex != 0)((mutex != 0) ? static_cast<void> (0) : __assert_fail ( "mutex != 0", "llvm/lib/System/Mutex.cpp", 102, __PRETTY_FUNCTION__ )); |
103 | pthread_mutex_destroy(mutex); |
104 | free(mutex); |
105 | } |
106 | } |
107 | |
108 | bool |
109 | MutexImpl::acquire() |
110 | { |
111 | if (pthread_enabled) |
112 | { |
113 | pthread_mutex_t* mutex = static_cast<pthread_mutex_t*>(data_); |
114 | assert(mutex != 0)((mutex != 0) ? static_cast<void> (0) : __assert_fail ( "mutex != 0", "llvm/lib/System/Mutex.cpp", 114, __PRETTY_FUNCTION__ )); |
115 | |
116 | int errorcode = pthread_mutex_lock(mutex); |
117 | return errorcode == 0; |
118 | } else return false; |
119 | } |
120 | |
121 | bool |
122 | MutexImpl::release() |
123 | { |
124 | if (pthread_enabled) |
125 | { |
126 | pthread_mutex_t* mutex = static_cast<pthread_mutex_t*>(data_); |
127 | assert(mutex != 0)((mutex != 0) ? static_cast<void> (0) : __assert_fail ( "mutex != 0", "llvm/lib/System/Mutex.cpp", 127, __PRETTY_FUNCTION__ )); |
128 | |
129 | int errorcode = pthread_mutex_unlock(mutex); |
130 | return errorcode == 0; |
131 | } else return false; |
132 | } |
133 | |
134 | bool |
135 | MutexImpl::tryacquire() |
136 | { |
137 | if (pthread_enabled) |
138 | { |
139 | pthread_mutex_t* mutex = static_cast<pthread_mutex_t*>(data_); |
140 | assert(mutex != 0)((mutex != 0) ? static_cast<void> (0) : __assert_fail ( "mutex != 0", "llvm/lib/System/Mutex.cpp", 140, __PRETTY_FUNCTION__ )); |
141 | |
142 | int errorcode = pthread_mutex_trylock(mutex); |
143 | return errorcode == 0; |
144 | } else return false; |
145 | } |
146 | |
147 | } |
148 | |
149 | #elif defined(LLVM_ON_UNIX1) |
150 | #include "Unix/Mutex.inc" |
151 | #elif defined( LLVM_ON_WIN32) |
152 | #include "Win32/Mutex.inc" |
153 | #else |
154 | #warning Neither LLVM_ON_UNIX1 nor LLVM_ON_WIN32 was set in System/Mutex.cpp |
155 | #endif |
156 | #endif |
157 |