Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(277)

Side by Side Diff: base/win/scoped_handle.h

Issue 507893002: Revert of Improve the ScopedHandle verifier. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | base/win/scoped_handle.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BASE_WIN_SCOPED_HANDLE_H_ 5 #ifndef BASE_WIN_SCOPED_HANDLE_H_
6 #define BASE_WIN_SCOPED_HANDLE_H_ 6 #define BASE_WIN_SCOPED_HANDLE_H_
7 7
8 #include <windows.h> 8 #include <windows.h>
9 9
10 #include "base/base_export.h" 10 #include "base/base_export.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 } 94 }
95 return temp; 95 return temp;
96 } 96 }
97 97
98 // Explicitly closes the owned handle. 98 // Explicitly closes the owned handle.
99 void Close() { 99 void Close() {
100 if (Traits::IsHandleValid(handle_)) { 100 if (Traits::IsHandleValid(handle_)) {
101 Verifier::StopTracking(handle_, this, BASE_WIN_GET_CALLER, 101 Verifier::StopTracking(handle_, this, BASE_WIN_GET_CALLER,
102 tracked_objects::GetProgramCounter()); 102 tracked_objects::GetProgramCounter());
103 103
104 Traits::CloseHandle(handle_); 104 if (!Traits::CloseHandle(handle_))
105 CHECK(false);
106
105 handle_ = Traits::NullHandle(); 107 handle_ = Traits::NullHandle();
106 } 108 }
107 } 109 }
108 110
109 private: 111 private:
110 Handle handle_; 112 Handle handle_;
111 }; 113 };
112 114
113 #undef BASE_WIN_GET_CALLER 115 #undef BASE_WIN_GET_CALLER
114 116
115 // The traits class for Win32 handles that can be closed via CloseHandle() API. 117 // The traits class for Win32 handles that can be closed via CloseHandle() API.
116 class HandleTraits { 118 class HandleTraits {
117 public: 119 public:
118 typedef HANDLE Handle; 120 typedef HANDLE Handle;
119 121
120 // Closes the handle. 122 // Closes the handle.
121 static bool BASE_EXPORT CloseHandle(HANDLE handle); 123 static bool CloseHandle(HANDLE handle) {
124 return ::CloseHandle(handle) != FALSE;
125 }
122 126
123 // Returns true if the handle value is valid. 127 // Returns true if the handle value is valid.
124 static bool IsHandleValid(HANDLE handle) { 128 static bool IsHandleValid(HANDLE handle) {
125 return handle != NULL && handle != INVALID_HANDLE_VALUE; 129 return handle != NULL && handle != INVALID_HANDLE_VALUE;
126 } 130 }
127 131
128 // Returns NULL handle value. 132 // Returns NULL handle value.
129 static HANDLE NullHandle() { 133 static HANDLE NullHandle() {
130 return NULL; 134 return NULL;
131 } 135 }
(...skipping 25 matching lines...) Expand all
157 const void* pc1, const void* pc2); 161 const void* pc1, const void* pc2);
158 static void StopTracking(HANDLE handle, const void* owner, 162 static void StopTracking(HANDLE handle, const void* owner,
159 const void* pc1, const void* pc2); 163 const void* pc1, const void* pc2);
160 164
161 private: 165 private:
162 DISALLOW_IMPLICIT_CONSTRUCTORS(VerifierTraits); 166 DISALLOW_IMPLICIT_CONSTRUCTORS(VerifierTraits);
163 }; 167 };
164 168
165 typedef GenericScopedHandle<HandleTraits, VerifierTraits> ScopedHandle; 169 typedef GenericScopedHandle<HandleTraits, VerifierTraits> ScopedHandle;
166 170
167 // This function should be called by the embedder to enable the use of
168 // VerifierTraits at runtime. It has no effect if DummyVerifierTraits is used
169 // for ScopedHandle.
170 void BASE_EXPORT EnableHandleVerifier();
171
172 // This should be called whenever the OS is closing a handle, if extended
173 // verification of improper handle closing is desired. If |handle| is being
174 // tracked by the handle verifier and ScopedHandle is not the one closing it,
175 // a CHECK is generated.
176 void BASE_EXPORT OnHandleBeingClosed(HANDLE handle);
177
178 } // namespace win 171 } // namespace win
179 } // namespace base 172 } // namespace base
180 173
181 #endif // BASE_SCOPED_HANDLE_WIN_H_ 174 #endif // BASE_SCOPED_HANDLE_WIN_H_
OLDNEW
« no previous file with comments | « no previous file | base/win/scoped_handle.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698