Index: content/browser/renderer_host/render_message_filter.cc |
diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc |
index 9d8392778e136044efe6c051f04ee55e8bc9bd0a..449afb4d4ea29a453fdb0a6758417dd59337218a 100644 |
--- a/content/browser/renderer_host/render_message_filter.cc |
+++ b/content/browser/renderer_host/render_message_filter.cc |
@@ -131,6 +131,12 @@ class RenderMessageCompletionCallback { |
} |
virtual ~RenderMessageCompletionCallback() { |
+ if (reply_msg_) { |
+ // If the owner of this class failed to call SendReplyAndDeleteThis(), |
+ // send an error reply to prevent the renderer from being hung. |
+ reply_msg_->set_reply_error(); |
+ filter_->Send(reply_msg_); |
+ } |
} |
RenderMessageFilter* filter() { return filter_.get(); } |
@@ -138,6 +144,7 @@ class RenderMessageCompletionCallback { |
void SendReplyAndDeleteThis() { |
filter_->Send(reply_msg_); |
+ reply_msg_ = NULL; |
delete this; |
} |