Index: base/task.h |
=================================================================== |
--- base/task.h (revision 27386) |
+++ base/task.h (working copy) |
@@ -205,33 +205,12 @@ |
template <class T> |
struct RunnableMethodTraits { |
- RunnableMethodTraits() { |
-#ifndef NDEBUG |
- origin_thread_id_ = PlatformThread::CurrentId(); |
-#endif |
- } |
- |
- ~RunnableMethodTraits() { |
-#ifndef NDEBUG |
- // If destroyed on a separate thread, then we had better have been using |
- // thread-safe reference counting! |
- if (origin_thread_id_ != PlatformThread::CurrentId()) |
- DCHECK(T::ImplementsThreadSafeReferenceCounting()); |
-#endif |
- } |
- |
- void RetainCallee(T* obj) { |
+ static void RetainCallee(T* obj) { |
obj->AddRef(); |
} |
- |
- void ReleaseCallee(T* obj) { |
+ static void ReleaseCallee(T* obj) { |
obj->Release(); |
} |
- |
- private: |
-#ifndef NDEBUG |
- PlatformThreadId origin_thread_id_; |
-#endif |
}; |
// RunnableMethod and RunnableFunction ----------------------------------------- |
@@ -261,13 +240,13 @@ |
// RunnableMethod and NewRunnableMethod implementation ------------------------- |
template <class T, class Method, class Params> |
-class RunnableMethod : public CancelableTask { |
+class RunnableMethod : public CancelableTask, |
+ public RunnableMethodTraits<T> { |
public: |
RunnableMethod(T* obj, Method meth, const Params& params) |
: obj_(obj), meth_(meth), params_(params) { |
- traits_.RetainCallee(obj_); |
+ RetainCallee(obj_); |
} |
- |
~RunnableMethod() { |
ReleaseCallee(); |
} |
@@ -284,7 +263,7 @@ |
private: |
void ReleaseCallee() { |
if (obj_) { |
- traits_.ReleaseCallee(obj_); |
+ RunnableMethodTraits<T>::ReleaseCallee(obj_); |
obj_ = NULL; |
} |
} |
@@ -292,7 +271,6 @@ |
T* obj_; |
Method meth_; |
Params params_; |
- RunnableMethodTraits<T> traits_; |
}; |
template <class T, class Method> |