| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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_TASK_H_ | 5 #ifndef BASE_TASK_H_ |
| 6 #define BASE_TASK_H_ | 6 #define BASE_TASK_H_ |
| 7 | 7 |
| 8 #include "base/non_thread_safe.h" | 8 #include "base/non_thread_safe.h" |
| 9 #include "base/tracked.h" | 9 #include "base/tracked.h" |
| 10 #include "base/tuple.h" | 10 #include "base/tuple.h" |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 ~RunnableMethodTraits() { | 214 ~RunnableMethodTraits() { |
| 215 #ifndef NDEBUG | 215 #ifndef NDEBUG |
| 216 // If destroyed on a separate thread, then we had better have been using | 216 // If destroyed on a separate thread, then we had better have been using |
| 217 // thread-safe reference counting! | 217 // thread-safe reference counting! |
| 218 if (origin_thread_id_ != PlatformThread::CurrentId()) | 218 if (origin_thread_id_ != PlatformThread::CurrentId()) |
| 219 DCHECK(T::ImplementsThreadSafeReferenceCounting()); | 219 DCHECK(T::ImplementsThreadSafeReferenceCounting()); |
| 220 #endif | 220 #endif |
| 221 } | 221 } |
| 222 | 222 |
| 223 void RetainCallee(T* obj) { | 223 void RetainCallee(T* obj) { |
| 224 #ifndef NDEBUG |
| 225 // Catch NewRunnableMethod being called in an object's constructor. This |
| 226 // isn't safe since the method can be invoked before the constructor |
| 227 // completes, causing the object to be deleted. |
| 228 obj->AddRef(); |
| 229 obj->Release(); |
| 230 #endif |
| 224 obj->AddRef(); | 231 obj->AddRef(); |
| 225 } | 232 } |
| 226 | 233 |
| 227 void ReleaseCallee(T* obj) { | 234 void ReleaseCallee(T* obj) { |
| 228 obj->Release(); | 235 obj->Release(); |
| 229 } | 236 } |
| 230 | 237 |
| 231 private: | 238 private: |
| 232 #ifndef NDEBUG | 239 #ifndef NDEBUG |
| 233 PlatformThreadId origin_thread_id_; | 240 PlatformThreadId origin_thread_id_; |
| (...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 | 675 |
| 669 template <class T, typename ReturnValue> | 676 template <class T, typename ReturnValue> |
| 670 typename CallbackWithReturnValue<ReturnValue>::Type* | 677 typename CallbackWithReturnValue<ReturnValue>::Type* |
| 671 NewCallbackWithReturnValue(T* object, ReturnValue (T::*method)()) { | 678 NewCallbackWithReturnValue(T* object, ReturnValue (T::*method)()) { |
| 672 return new CallbackWithReturnValueImpl<T, ReturnValue (T::*)(), ReturnValue>( | 679 return new CallbackWithReturnValueImpl<T, ReturnValue (T::*)(), ReturnValue>( |
| 673 object, method); | 680 object, method); |
| 674 } | 681 } |
| 675 | 682 |
| 676 | 683 |
| 677 #endif // BASE_TASK_H_ | 684 #endif // BASE_TASK_H_ |
| OLD | NEW |