| Index: mojo/public/bindings/lib/router.cc
|
| diff --git a/mojo/public/bindings/lib/router.cc b/mojo/public/bindings/lib/router.cc
|
| index 2f5f4694fc1649b82c2e120234397d359a3f1777..90e0541f922494538caaedcee94f67f751c43446 100644
|
| --- a/mojo/public/bindings/lib/router.cc
|
| +++ b/mojo/public/bindings/lib/router.cc
|
| @@ -27,7 +27,6 @@ class ResponderThunk : public MessageReceiver {
|
| if (router)
|
| result = router->Accept(message);
|
|
|
| - delete this;
|
| return result;
|
| }
|
|
|
| @@ -94,6 +93,7 @@ bool Router::AcceptWithResponder(Message* message,
|
| if (!connector_.Accept(message))
|
| return false;
|
|
|
| + // We assume ownership of |responder|.
|
| responders_[request_id] = responder;
|
| return true;
|
| }
|
| @@ -101,9 +101,11 @@ bool Router::AcceptWithResponder(Message* message,
|
| bool Router::HandleIncomingMessage(Message* message) {
|
| if (message->has_flag(kMessageExpectsResponse)) {
|
| if (incoming_receiver_) {
|
| - return incoming_receiver_->AcceptWithResponder(
|
| - message,
|
| - new ResponderThunk(weak_self_));
|
| + MessageReceiver* responder = new ResponderThunk(weak_self_);
|
| + bool ok = incoming_receiver_->AcceptWithResponder(message, responder);
|
| + if (!ok)
|
| + delete responder;
|
| + return ok;
|
| }
|
|
|
| // If we receive a request expecting a response when the client is not
|
| @@ -119,6 +121,7 @@ bool Router::HandleIncomingMessage(Message* message) {
|
| MessageReceiver* responder = it->second;
|
| responders_.erase(it);
|
| responder->Accept(message);
|
| + delete responder;
|
| } else {
|
| if (incoming_receiver_)
|
| return incoming_receiver_->Accept(message);
|
|
|