summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-02 21:39:30 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-02 21:39:30 +0000
commita63424d0df79fc6d6742b1670b15985a0acc2efe (patch)
treecda8b79e8a8de8d6aea817cfb3f3f0d60d935af5 /chrome/renderer
parent904998f9e92fddea3bb8acf7580524b5aa4bf04d (diff)
downloadchromium_src-a63424d0df79fc6d6742b1670b15985a0acc2efe.zip
chromium_src-a63424d0df79fc6d6742b1670b15985a0acc2efe.tar.gz
chromium_src-a63424d0df79fc6d6742b1670b15985a0acc2efe.tar.bz2
Fix the IPC::SyncChannel leaks with RenderThread in the callstack. This works by emptying the IPC message loop of its tasks, which frees the SyncContext object. After this is checked in, I'll keep an eye to see if the same thing needs to be done for the SyncChannel tests (they seem to not be generating errors, from looking at the last dozen runs).
Review URL: http://codereview.chromium.org/28307 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10727 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/render_process_unittest.cc23
-rw-r--r--chrome/renderer/render_thread_unittest.cc6
2 files changed, 21 insertions, 8 deletions
diff --git a/chrome/renderer/render_process_unittest.cc b/chrome/renderer/render_process_unittest.cc
index 848b53b..c787e44 100644
--- a/chrome/renderer/render_process_unittest.cc
+++ b/chrome/renderer/render_process_unittest.cc
@@ -10,19 +10,32 @@
namespace {
+static const wchar_t kThreadName[] = L"render_process_unittest";
+
class RenderProcessTest : public testing::Test {
public:
virtual void SetUp() {
- render_process_.reset(new RenderProcess(L"render_process_unittest"));
+ // Need a MODE_SERVER to make MODE_CLIENTs (like a RenderThread) happy.
+ channel_ = new IPC::Channel(kThreadName, IPC::Channel::MODE_SERVER, NULL);
+ render_process_.reset(new RenderProcess(kThreadName));
}
virtual void TearDown() {
+ message_loop_.RunAllPending();
render_process_.reset();
- }
+ // Need to fully destruct IPC::SyncChannel before the message loop goes
+ // away.
+ message_loop_.RunAllPending();
+ // Delete the server channel after the RenderThread so that
+ // IPC::SyncChannel's OnChannelError doesn't fire on the context and attempt
+ // to use the listener thread which is now gone.
+ delete channel_;
+ }
- private:
- MessageLoopForIO message_loop_;
- scoped_ptr<RenderProcess> render_process_;
+ private:
+ MessageLoopForIO message_loop_;
+ scoped_ptr<RenderProcess> render_process_;
+ IPC::Channel *channel_;
};
diff --git a/chrome/renderer/render_thread_unittest.cc b/chrome/renderer/render_thread_unittest.cc
index 3d09c51..808bedf 100644
--- a/chrome/renderer/render_thread_unittest.cc
+++ b/chrome/renderer/render_thread_unittest.cc
@@ -24,13 +24,13 @@ class RenderThreadTest : public testing::Test {
virtual void TearDown() {
message_loop_.RunAllPending();
mock_process_.reset();
+ // Need to fully destruct IPC::SyncChannel before the message loop goes
+ // away.
+ message_loop_.RunAllPending();
// Delete the server channel after the RenderThread so that
// IPC::SyncChannel's OnChannelError doesn't fire on the context and attempt
// to use the listener thread which is now gone.
delete channel_;
- // Need to fully destruct IPC::SyncChannel before the message loop goes
- // away.
- message_loop_.RunAllPending();
}
protected: