diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-02 21:39:30 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-02 21:39:30 +0000 |
commit | a63424d0df79fc6d6742b1670b15985a0acc2efe (patch) | |
tree | cda8b79e8a8de8d6aea817cfb3f3f0d60d935af5 /chrome/renderer | |
parent | 904998f9e92fddea3bb8acf7580524b5aa4bf04d (diff) | |
download | chromium_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.cc | 23 | ||||
-rw-r--r-- | chrome/renderer/render_thread_unittest.cc | 6 |
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: |