| Index: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| index 44d1428d00340edc9472a5e6f2bcba0a5854eca5..29ccaa8ba0981e7d407d1c90f6d2c2889d185f0f 100644
|
| --- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| @@ -116,16 +116,21 @@ class {{class_name}}_{{method.name}}_ProxyToResponder
|
| public:
|
| virtual ~{{class_name}}_{{method.name}}_ProxyToResponder() {
|
| delete responder_;
|
| - // TODO(rudominer) DCHECK if |was_run_| is false and we don't have evidence
|
| - // that we are in a legitamte shutdown case such as the Connector detected
|
| - // an error or Close() was invoked.
|
| + if (owning_stub_ && !owning_stub_->connection_error_occurred() &&
|
| + !owning_stub_->closed()) {
|
| + MOJO_DCHECK(was_run_) << "The callback passed to "
|
| + "{{class_name}}::{{method.name}}({%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}callback) "
|
| + "was never run.";
|
| + }
|
| }
|
|
|
| {{class_name}}_{{method.name}}_ProxyToResponder(
|
| uint64_t request_id,
|
| - mojo::MessageReceiver* responder)
|
| + mojo::MessageReceiver* responder,
|
| + {{class_name}}Stub* owning_stub)
|
| : request_id_(request_id),
|
| responder_(responder),
|
| + owning_stub_(owning_stub),
|
| was_run_(false) {
|
| }
|
|
|
| @@ -134,6 +139,7 @@ class {{class_name}}_{{method.name}}_ProxyToResponder
|
| private:
|
| uint64_t request_id_;
|
| mutable mojo::MessageReceiver* responder_;
|
| + {{class_name}}Stub* owning_stub_;
|
| mutable bool was_run_;
|
| MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder);
|
| };
|
| @@ -156,7 +162,7 @@ void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
|
| {%- endfor %}
|
|
|
| {{class_name}}Stub::{{class_name}}Stub()
|
| - : sink_(nullptr) {
|
| + : sink_(nullptr), connection_error_occurred_(false), closed_(false) {
|
| }
|
|
|
| {#--- Stub definition #}
|
| @@ -201,7 +207,7 @@ bool {{class_name}}Stub::AcceptWithResponder(
|
| params->DecodePointersAndHandles(message->mutable_handles());
|
| {{class_name}}::{{method.name}}Callback::Runnable* runnable =
|
| new {{class_name}}_{{method.name}}_ProxyToResponder(
|
| - message->request_id(), responder);
|
| + message->request_id(), responder, this);
|
| {{class_name}}::{{method.name}}Callback callback(runnable);
|
| {{alloc_params(method|struct_from_method)|indent(4)}}
|
| // A null |sink_| means no implementation was bound.
|
|
|