Index: base/win/scoped_handle.cc |
diff --git a/base/win/scoped_handle.cc b/base/win/scoped_handle.cc |
index fbc7d40766e34871b25e4cd940a9a6ce59e83ad4..7b38369d5aa2706a8f7469f994ed1c1d48801846 100644 |
--- a/base/win/scoped_handle.cc |
+++ b/base/win/scoped_handle.cc |
@@ -4,12 +4,11 @@ |
#include "base/win/scoped_handle.h" |
-#include "base/containers/hash_tables.h" |
+#include <map> |
+ |
#include "base/debug/alias.h" |
-#include "base/hash.h" |
#include "base/lazy_instance.h" |
-#include "base/logging.h" |
-#include "base/synchronization/lock_impl.h" |
+#include "base/synchronization/lock.h" |
#include "base/win/windows_version.h" |
namespace { |
@@ -20,86 +19,23 @@ |
const void* pc2; |
DWORD thread_id; |
}; |
-typedef base::hash_map<HANDLE, Info> HandleMap; |
+typedef std::map<HANDLE, Info> HandleMap; |
-typedef base::internal::LockImpl NativeLock; |
base::LazyInstance<HandleMap>::Leaky g_handle_map = LAZY_INSTANCE_INITIALIZER; |
-base::LazyInstance<NativeLock>::Leaky g_lock = LAZY_INSTANCE_INITIALIZER; |
-bool g_closing = false; |
-bool g_verifier_enabled = false; |
- |
-bool CloseHandleWrapper(HANDLE handle) { |
- if (!::CloseHandle(handle)) |
- CHECK(false); |
- return true; |
-} |
- |
-// Simple automatic locking using a native critical section so it supports |
-// recursive locking. |
-class AutoNativeLock { |
- public: |
- explicit AutoNativeLock(NativeLock& lock) : lock_(lock) { |
- lock_.Lock(); |
- } |
- |
- ~AutoNativeLock() { |
- lock_.Unlock(); |
- } |
- |
- private: |
- NativeLock& lock_; |
- DISALLOW_COPY_AND_ASSIGN(AutoNativeLock); |
-}; |
- |
-inline size_t HashHandle(const HANDLE& handle) { |
- char buffer[sizeof(handle)]; |
- memcpy(buffer, &handle, sizeof(handle)); |
- return base::Hash(buffer, sizeof(buffer)); |
-} |
+base::LazyInstance<base::Lock>::Leaky g_lock = LAZY_INSTANCE_INITIALIZER; |
} // namespace |
- |
-namespace BASE_HASH_NAMESPACE { |
-#if defined(COMPILER_MSVC) |
-inline size_t hash_value(const HANDLE& handle) { |
- return HashHandle(handle); |
-} |
-#elif defined (COMPILER_GCC) |
-template <> |
-struct hash<HANDLE> { |
- size_t operator()(const HANDLE& handle) const { |
- return HashHandle(handle); |
- } |
-}; |
-#endif |
-} // BASE_HASH_NAMESPACE |
namespace base { |
namespace win { |
// Static. |
-bool HandleTraits::CloseHandle(HANDLE handle) { |
- if (!g_verifier_enabled) |
- return CloseHandleWrapper(handle); |
- |
- AutoNativeLock lock(g_lock.Get()); |
- g_closing = true; |
- CloseHandleWrapper(handle); |
- g_closing = false; |
- |
- return true; |
-} |
- |
-// Static. |
void VerifierTraits::StartTracking(HANDLE handle, const void* owner, |
const void* pc1, const void* pc2) { |
- if (!g_verifier_enabled) |
- return; |
- |
// Grab the thread id before the lock. |
DWORD thread_id = GetCurrentThreadId(); |
- AutoNativeLock lock(g_lock.Get()); |
+ AutoLock lock(g_lock.Get()); |
Info handle_info = { owner, pc1, pc2, thread_id }; |
std::pair<HANDLE, Info> item(handle, handle_info); |
@@ -114,10 +50,7 @@ |
// Static. |
void VerifierTraits::StopTracking(HANDLE handle, const void* owner, |
const void* pc1, const void* pc2) { |
- if (!g_verifier_enabled) |
- return; |
- |
- AutoNativeLock lock(g_lock.Get()); |
+ AutoLock lock(g_lock.Get()); |
HandleMap::iterator i = g_handle_map.Get().find(handle); |
if (i == g_handle_map.Get().end()) |
CHECK(false); |
@@ -131,23 +64,5 @@ |
g_handle_map.Get().erase(i); |
} |
-void EnableHandleVerifier() { |
- g_verifier_enabled = true; |
-} |
- |
-void OnHandleBeingClosed(HANDLE handle) { |
- AutoNativeLock lock(g_lock.Get()); |
- if (g_closing) |
- return; |
- |
- HandleMap::iterator i = g_handle_map.Get().find(handle); |
- if (i == g_handle_map.Get().end()) |
- return; |
- |
- Info other = i->second; |
- debug::Alias(&other); |
- CHECK(false); |
-} |
- |
} // namespace win |
} // namespace base |