| Index: base/callback_internal.h
|
| diff --git a/base/callback_internal.h b/base/callback_internal.h
|
| index 81c87c0aa749759d9dd987aa16fb0fd3c4e9bdef..4bb8aa9b4ebeb65c67419d1e7f098022f9eb8cf2 100644
|
| --- a/base/callback_internal.h
|
| +++ b/base/callback_internal.h
|
| @@ -29,29 +29,6 @@ class BindStateBase : public RefCountedThreadSafe<BindStateBase> {
|
| virtual ~BindStateBase() {}
|
| };
|
|
|
| -// This structure exists purely to pass the returned |bind_state_| from
|
| -// Bind() to Callback while avoiding an extra AddRef/Release() pair.
|
| -//
|
| -// To do this, the constructor of Callback<> must take a const-ref. The
|
| -// reference must be to a const object otherwise the compiler will emit a
|
| -// warning about taking a reference to a temporary.
|
| -//
|
| -// Unfortunately, this means that the internal |bind_state_| field must
|
| -// be made mutable.
|
| -template <typename T>
|
| -struct BindStateHolder {
|
| - explicit BindStateHolder(T* bind_state)
|
| - : bind_state_(bind_state) {
|
| - }
|
| -
|
| - mutable scoped_refptr<BindStateBase> bind_state_;
|
| -};
|
| -
|
| -template <typename T>
|
| -BindStateHolder<T> MakeBindStateHolder(T* o) {
|
| - return BindStateHolder<T>(o);
|
| -}
|
| -
|
| // Holds the Callback methods that don't require specialization to reduce
|
| // template bloat.
|
| class BASE_EXPORT CallbackBase {
|
| @@ -72,8 +49,11 @@ class BASE_EXPORT CallbackBase {
|
| // Returns true if this callback equals |other|. |other| may be null.
|
| bool Equals(const CallbackBase& other) const;
|
|
|
| - CallbackBase(InvokeFuncStorage polymorphic_invoke,
|
| - scoped_refptr<BindStateBase>* bind_state);
|
| + // Allow initializing of |bind_state_| via the constructor to avoid default
|
| + // initialization of the scoped_refptr. We do not also initialize
|
| + // |polymorphic_invoke_| here because doing a normal assignment in the
|
| + // derived Callback templates makes for much nicer compiler errors.
|
| + explicit CallbackBase(BindStateBase* bind_state);
|
|
|
| // Force the destructor to be instantiated inside this translation unit so
|
| // that our subclasses will not get inlined versions. Avoids more template
|
|
|