Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Unified Diff: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl

Issue 1003773002: CPP bindings: DCHECK when a Callback is destructed without being invoked (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Adds close() notification to Stub when Binding is closed or deleted. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.

Powered by Google App Engine
This is Rietveld 408576698