From 7eaef8a494b1e8c6f015d8ca239865c6032facf3 Mon Sep 17 00:00:00 2001 From: Pirama Arumuga Nainar Date: Tue, 6 Sep 2016 13:34:42 -0700 Subject: [PATCH] Use and from MinGW New MinGW prebuilts update includes pthreads and C++11 threads support. Use mutex.h and condition_variable provided by MinGW. Test: Build AOSP with new MinGW prebuilts Change-Id: Ia8f890f86652612df3fc2618c2bfbb450a5a2f52 --- adb/adb_auth_host.cpp | 1 - adb/sockets.cpp | 1 - adb/sysdeps/condition_variable.h | 61 ---------------- adb/sysdeps/mutex.h | 120 ------------------------------- adb/sysdeps_test.cpp | 3 +- adb/transport_local.cpp | 3 +- 6 files changed, 2 insertions(+), 187 deletions(-) delete mode 100644 adb/sysdeps/condition_variable.h delete mode 100644 adb/sysdeps/mutex.h diff --git a/adb/adb_auth_host.cpp b/adb/adb_auth_host.cpp index 836654975..072c7f57d 100644 --- a/adb/adb_auth_host.cpp +++ b/adb/adb_auth_host.cpp @@ -45,7 +45,6 @@ #include "adb_auth.h" #include "adb_utils.h" #include "sysdeps.h" -#include "sysdeps/mutex.h" static std::mutex& g_keys_mutex = *new std::mutex; static std::map>& g_keys = diff --git a/adb/sockets.cpp b/adb/sockets.cpp index 4ed1c45c1..abba7452b 100644 --- a/adb/sockets.cpp +++ b/adb/sockets.cpp @@ -36,7 +36,6 @@ #include "adb.h" #include "adb_io.h" -#include "sysdeps/mutex.h" #include "transport.h" static std::recursive_mutex& local_socket_list_lock = *new std::recursive_mutex(); diff --git a/adb/sysdeps/condition_variable.h b/adb/sysdeps/condition_variable.h deleted file mode 100644 index 117cd40ad..000000000 --- a/adb/sysdeps/condition_variable.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include - -#include "sysdeps/mutex.h" - -#if defined(_WIN32) - -#include - -#include - -// The prebuilt version of mingw we use doesn't support condition_variable. -// Therefore, implement our own using the Windows primitives. -// Put them directly into the std namespace, so that when they're actually available, the build -// breaks until they're removed. - -namespace std { - -class condition_variable { - public: - condition_variable() { - InitializeConditionVariable(&cond_); - } - - void wait(std::unique_lock& lock) { - std::mutex *m = lock.mutex(); - m->lock_count_--; - SleepConditionVariableCS(&cond_, m->native_handle(), INFINITE); - m->lock_count_++; - } - - void notify_one() { - WakeConditionVariable(&cond_); - } - - private: - CONDITION_VARIABLE cond_; - - DISALLOW_COPY_AND_ASSIGN(condition_variable); -}; - -} - -#endif // defined(_WIN32) diff --git a/adb/sysdeps/mutex.h b/adb/sysdeps/mutex.h deleted file mode 100644 index 226f7f194..000000000 --- a/adb/sysdeps/mutex.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once -#if defined(_WIN32) - -#include - -#include - -#include "adb.h" - -// The prebuilt version of mingw we use doesn't support mutex or recursive_mutex. -// Therefore, implement our own using the Windows primitives. -// Put them directly into the std namespace, so that when they're actually available, the build -// breaks until they're removed. - -#include -namespace std { - -// CRITICAL_SECTION is recursive, so just wrap it in a Mutex-compatible class. -class recursive_mutex { - public: - typedef CRITICAL_SECTION* native_handle_type; - - recursive_mutex() { - InitializeCriticalSection(&cs_); - } - - ~recursive_mutex() { - DeleteCriticalSection(&cs_); - } - - void lock() { - EnterCriticalSection(&cs_); - } - - bool try_lock() { - return TryEnterCriticalSection(&cs_); - } - - void unlock() { - LeaveCriticalSection(&cs_); - } - - native_handle_type native_handle() { - return &cs_; - } - - private: - CRITICAL_SECTION cs_; - - DISALLOW_COPY_AND_ASSIGN(recursive_mutex); -}; - -class mutex { - public: - typedef CRITICAL_SECTION* native_handle_type; - - mutex() { - } - - ~mutex() { - } - - void lock() { - mutex_.lock(); - if (++lock_count_ != 1) { - fatal("non-recursive mutex locked reentrantly"); - } - } - - void unlock() { - if (--lock_count_ != 0) { - fatal("non-recursive mutex unlock resulted in unexpected lock count: %d", lock_count_); - } - mutex_.unlock(); - } - - bool try_lock() { - if (!mutex_.try_lock()) { - return false; - } - - if (lock_count_ != 0) { - mutex_.unlock(); - return false; - } - - ++lock_count_; - return true; - } - - native_handle_type native_handle() { - return mutex_.native_handle(); - } - - private: - recursive_mutex mutex_; - size_t lock_count_ = 0; - - friend class condition_variable; -}; - -} - -#endif // defined(_WIN32) diff --git a/adb/sysdeps_test.cpp b/adb/sysdeps_test.cpp index 740f28365..f87167515 100644 --- a/adb/sysdeps_test.cpp +++ b/adb/sysdeps_test.cpp @@ -17,11 +17,10 @@ #include #include #include +#include #include "adb_io.h" #include "sysdeps.h" -#include "sysdeps/condition_variable.h" -#include "sysdeps/mutex.h" static void increment_atomic_int(void* c) { sleep(1); diff --git a/adb/transport_local.cpp b/adb/transport_local.cpp index 395b893ea..89e950dc9 100644 --- a/adb/transport_local.cpp +++ b/adb/transport_local.cpp @@ -17,8 +17,6 @@ #define TRACE_TAG TRANSPORT #include "sysdeps.h" -#include "sysdeps/condition_variable.h" -#include "sysdeps/mutex.h" #include "transport.h" #include @@ -27,6 +25,7 @@ #include #include +#include #include #include