Index: base/bind_internal.h.pump |
diff --git a/base/bind_internal.h.pump b/base/bind_internal.h.pump |
index ac228e6eeac9e9c4123f99fb8f458cd561b565d8..f632b99e556db0aeb1669dabd1dc1b4b1be30e97 100644 |
--- a/base/bind_internal.h.pump |
+++ b/base/bind_internal.h.pump |
@@ -286,6 +286,7 @@ struct InvokeHelper; |
$for ARITY [[ |
$range ARG 1..ARITY |
+$range WEAKCALL_ARG 2..ARITY |
template <typename ReturnType, typename Runnable[[]] |
$if ARITY > 0 [[,]] $for ARG , [[typename A$(ARG)]]> |
@@ -309,16 +310,18 @@ $if ARITY > 0[[, ]] $for ARG , [[A$(ARG) a$(ARG)]]) { |
$if ARITY > 0 [[ |
-template <typename Runnable[[]], $for ARG , [[typename A$(ARG)]]> |
+template <typename Runnable[[]], typename BoundWeakPtr |
+$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[typename A$(WEAKCALL_ARG)]]> |
struct InvokeHelper<true, void, Runnable, |
- void($for ARG , [[A$(ARG)]])> { |
- static void MakeItSo(Runnable runnable[[]] |
-$if ARITY > 0[[, ]] $for ARG , [[A$(ARG) a$(ARG)]]) { |
- if (!a1.get()) { |
+ void(BoundWeakPtr |
+$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[A$(WEAKCALL_ARG)]])> { |
+ static void MakeItSo(Runnable runnable, BoundWeakPtr weak_ptr |
+$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[A$(WEAKCALL_ARG) a$(WEAKCALL_ARG)]]) { |
+ if (!weak_ptr.get()) { |
return; |
} |
- |
- runnable.Run($for ARG , [[CallbackForward(a$(ARG))]]); |
+ runnable.Run(weak_ptr.get() |
+$if ARITY > 1[[, ]] $for WEAKCALL_ARG , [[CallbackForward(a$(WEAKCALL_ARG))]]); |
} |
}; |