diff options
author | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-27 01:26:16 +0000 |
---|---|---|
committer | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-27 01:26:16 +0000 |
commit | cd636d8fb36d118a995f913920031b1f6c33fdec (patch) | |
tree | ea455370d2fb0a318ae88f6e8090cc36ad53fe67 /base/thread_unittest.cc | |
parent | dac395fecf2ce32c37737143f3b8eb71d3ce38b3 (diff) | |
download | chromium_src-cd636d8fb36d118a995f913920031b1f6c33fdec.zip chromium_src-cd636d8fb36d118a995f913920031b1f6c33fdec.tar.gz chromium_src-cd636d8fb36d118a995f913920031b1f6c33fdec.tar.bz2 |
Moved Init() before startup_data_->event.Signal() because derived
classes may not be safe to use until Init() has been called. As an
example, RenderThread() creates it's IPC::SyncChannel in Init(), so it
isn't safe to call Send() method until after.
Update use of a Thread (hit with ui_tests) to no longer require Init()
be called after the startup event is signaled (required old thread
behavior).
Ran a bunch more tests on Windows to try harder to make sure I didn't break anything.
Review URL: http://codereview.chromium.org/18824
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8695 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/thread_unittest.cc')
-rw-r--r-- | base/thread_unittest.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/base/thread_unittest.cc b/base/thread_unittest.cc index 085df71..f741951 100644 --- a/base/thread_unittest.cc +++ b/base/thread_unittest.cc @@ -37,6 +37,20 @@ class SleepSome : public Task { int msec_; }; +class SleepInsideInitThread : public Thread { + public: + SleepInsideInitThread() : Thread("none") { init_called_ = false; } + virtual ~SleepInsideInitThread() { } + + virtual void Init() { + PlatformThread::Sleep(500); + init_called_ = true; + } + bool InitCalled() { return init_called_; } + private: + bool init_called_; +}; + } // namespace TEST_F(ThreadTest, Restart) { @@ -107,3 +121,12 @@ TEST_F(ThreadTest, ThreadName) { EXPECT_TRUE(a.Start()); EXPECT_EQ("ThreadName", a.thread_name()); } + +// Make sure we can't use a thread between Start() and Init(). +TEST_F(ThreadTest, SleepInsideInit) { + SleepInsideInitThread t; + EXPECT_FALSE(t.InitCalled()); + t.Start(); + EXPECT_TRUE(t.InitCalled()); +} + |