Fix Windows try_lock implementation

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292011 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Fiselier
2017-01-14 10:27:12 +00:00
parent 78463e748d
commit 30d12e372a
3 changed files with 15 additions and 14 deletions

View File

@@ -102,7 +102,7 @@ _LIBCPP_THREAD_ABI_VISIBILITY
int __libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t *__m); int __libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t *__m);
_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_THREAD_ABI_VISIBILITY
int __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t *__m); bool __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t *__m);
_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_THREAD_ABI_VISIBILITY
int __libcpp_recursive_mutex_unlock(__libcpp_recursive_mutex_t *__m); int __libcpp_recursive_mutex_unlock(__libcpp_recursive_mutex_t *__m);
@@ -114,7 +114,7 @@ _LIBCPP_THREAD_ABI_VISIBILITY
int __libcpp_mutex_lock(__libcpp_mutex_t *__m); int __libcpp_mutex_lock(__libcpp_mutex_t *__m);
_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_THREAD_ABI_VISIBILITY
int __libcpp_mutex_trylock(__libcpp_mutex_t *__m); bool __libcpp_mutex_trylock(__libcpp_mutex_t *__m);
_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_THREAD_ABI_VISIBILITY
int __libcpp_mutex_unlock(__libcpp_mutex_t *__m); int __libcpp_mutex_unlock(__libcpp_mutex_t *__m);
@@ -221,9 +221,9 @@ int __libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t *__m)
return pthread_mutex_lock(__m); return pthread_mutex_lock(__m);
} }
int __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t *__m) bool __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t *__m)
{ {
return pthread_mutex_trylock(__m); return pthread_mutex_trylock(__m) == 0;
} }
int __libcpp_recursive_mutex_unlock(__libcpp_mutex_t *__m) int __libcpp_recursive_mutex_unlock(__libcpp_mutex_t *__m)
@@ -241,9 +241,9 @@ int __libcpp_mutex_lock(__libcpp_mutex_t *__m)
return pthread_mutex_lock(__m); return pthread_mutex_lock(__m);
} }
int __libcpp_mutex_trylock(__libcpp_mutex_t *__m) bool __libcpp_mutex_trylock(__libcpp_mutex_t *__m)
{ {
return pthread_mutex_trylock(__m); return pthread_mutex_trylock(__m) == 0;
} }
int __libcpp_mutex_unlock(__libcpp_mutex_t *__m) int __libcpp_mutex_unlock(__libcpp_mutex_t *__m)
@@ -371,10 +371,9 @@ int __libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t *__m)
return 0; return 0;
} }
int __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t *__m) bool __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t *__m)
{ {
TryEnterCriticalSection(__m); return TryEnterCriticalSection(__m) != 0;
return 0;
} }
int __libcpp_recursive_mutex_unlock(__libcpp_recursive_mutex_t *__m) int __libcpp_recursive_mutex_unlock(__libcpp_recursive_mutex_t *__m)
@@ -395,10 +394,9 @@ int __libcpp_mutex_lock(__libcpp_mutex_t *__m)
return 0; return 0;
} }
int __libcpp_mutex_trylock(__libcpp_mutex_t *__m) bool __libcpp_mutex_trylock(__libcpp_mutex_t *__m)
{ {
TryAcquireSRWLockExclusive(__m); return TryAcquireSRWLockExclusive(__m) != 0;
return 0;
} }
int __libcpp_mutex_unlock(__libcpp_mutex_t *__m) int __libcpp_mutex_unlock(__libcpp_mutex_t *__m)

View File

@@ -37,7 +37,7 @@ mutex::lock()
bool bool
mutex::try_lock() _NOEXCEPT mutex::try_lock() _NOEXCEPT
{ {
return __libcpp_mutex_trylock(&__m_) == 0; return __libcpp_mutex_trylock(&__m_);
} }
void void
@@ -83,7 +83,7 @@ recursive_mutex::unlock() _NOEXCEPT
bool bool
recursive_mutex::try_lock() _NOEXCEPT recursive_mutex::try_lock() _NOEXCEPT
{ {
return __libcpp_recursive_mutex_trylock(&__m_) == 0; return __libcpp_recursive_mutex_trylock(&__m_);
} }
// timed_mutex // timed_mutex

View File

@@ -382,6 +382,9 @@ class Configuration(object):
if '__cpp_structured_bindings' not in macros: if '__cpp_structured_bindings' not in macros:
self.config.available_features.add('libcpp-no-structured-bindings') self.config.available_features.add('libcpp-no-structured-bindings')
if self.is_windows:
self.config.available_features.add('windows')
def configure_compile_flags(self): def configure_compile_flags(self):
no_default_flags = self.get_lit_bool('no_default_flags', False) no_default_flags = self.get_lit_bool('no_default_flags', False)
if not no_default_flags: if not no_default_flags: