diff options
author | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 06:13:55 +0000 |
---|---|---|
committer | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 06:13:55 +0000 |
commit | 4ab4ae67224d00b4ff162fc201442e7933f6df4d (patch) | |
tree | ab32d56745b0f19f58750e5baaafec74eb3d0c3a | |
parent | e66c8d775d9ea5e244dae38cb9c9ee1ae846f763 (diff) | |
download | chromium_src-4ab4ae67224d00b4ff162fc201442e7933f6df4d.zip chromium_src-4ab4ae67224d00b4ff162fc201442e7933f6df4d.tar.gz chromium_src-4ab4ae67224d00b4ff162fc201442e7933f6df4d.tar.bz2 |
Fix for mac_valgrind giving an error on condition variable.
Wait for ALL_DONE state before exiting the test.
BUG=74727
TEST=mac_valgrind
R=jar
Review URL: http://codereview.chromium.org/6588135
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76883 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/metrics/thread_watcher_unittest.cc | 28 | ||||
-rw-r--r-- | tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt | 5 |
2 files changed, 17 insertions, 16 deletions
diff --git a/chrome/browser/metrics/thread_watcher_unittest.cc b/chrome/browser/metrics/thread_watcher_unittest.cc index 71e0008..d191fd6 100644 --- a/chrome/browser/metrics/thread_watcher_unittest.cc +++ b/chrome/browser/metrics/thread_watcher_unittest.cc @@ -24,7 +24,6 @@ enum State { ACTIVATED, // Thread watching activated. SENT_PING, // Sent ping message to watched thread. RECEIVED_PONG, // Received Pong message. - CHECK_RESPONSE_OK, // CheckResponse verified ping/pong. DEACTIVATED, // Thread watching de-activated. }; @@ -32,6 +31,7 @@ enum WaitState { UNINITIALIZED, STARTED_WAITING, // Start waiting for state_ to change to expected_state. STOPPED_WAITING, // Done with the waiting. + ALL_DONE, // Done with waiting for STOPPED_WAITING. }; enum CheckResponseState { @@ -152,21 +152,22 @@ class CustomThreadWatcher : public ThreadWatcher { return responsive; } - void VeryLongMethod(TimeDelta wait_time) { + void WaitForWaitStateChange(TimeDelta wait_time, WaitState expected_state) { DCHECK(!WatchDogThread::CurrentlyOnWatchDogThread()); TimeTicks end_time = TimeTicks::Now() + wait_time; { base::AutoLock auto_lock(custom_lock_); - while (wait_state_ != STOPPED_WAITING && TimeTicks::Now() < end_time) { - TimeDelta state_change_wait_time = end_time - TimeTicks::Now(); - // LOG(INFO) << "In VeryLongMethod: thread_name_: " << thread_name_ << - // " wait:" << state_change_wait_time.InMilliseconds() << - // " wait_state_:" << wait_state_; - state_changed_.TimedWait(state_change_wait_time); - } + while (wait_state_ != expected_state && TimeTicks::Now() < end_time) + state_changed_.TimedWait(end_time - TimeTicks::Now()); } } + void VeryLongMethod(TimeDelta wait_time) { + DCHECK(!WatchDogThread::CurrentlyOnWatchDogThread()); + WaitForWaitStateChange(wait_time, STOPPED_WAITING); + UpdateWaitState(ALL_DONE); + } + State WaitForStateChange(const TimeDelta& wait_time, State expected_state) { DCHECK(!WatchDogThread::CurrentlyOnWatchDogThread()); UpdateWaitState(STARTED_WAITING); @@ -389,6 +390,9 @@ TEST_F(ThreadWatcherTest, ThreadNotResponding) { WatchDogThread::PostTask( FROM_HERE, NewRunnableMethod(io_watcher_, &ThreadWatcher::DeActivateThreadWatching)); + + // Wait for the io_watcher_'s VeryLongMethod to finish. + io_watcher_->WaitForWaitStateChange(kUnresponsiveTime * 10, ALL_DONE); } // Test watching of multiple threads with all threads not responding. @@ -434,8 +438,7 @@ TEST_F(ThreadWatcherTest, MultipleThreadsResponding) { } // Test watching of multiple threads with one of the threads not responding. -// Disabled, http://crbug.com/74727. -TEST_F(ThreadWatcherTest, DISABLED_MultipleThreadsNotResponding) { +TEST_F(ThreadWatcherTest, MultipleThreadsNotResponding) { // Simulate hanging of watched thread by making the watched thread wait for a // very long time by posting a task on watched thread that keeps it busy. BrowserThread::PostTask( @@ -477,4 +480,7 @@ TEST_F(ThreadWatcherTest, DISABLED_MultipleThreadsNotResponding) { FROM_HERE, NewRunnableMethod( webkit_watcher_, &ThreadWatcher::DeActivateThreadWatching)); + + // Wait for the io_watcher_'s VeryLongMethod to finish. + io_watcher_->WaitForWaitStateChange(kUnresponsiveTime * 10, ALL_DONE); } diff --git a/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt b/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt index 10a2a74..5825ee8 100644 --- a/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt +++ b/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt @@ -31,8 +31,3 @@ MultiProcessNotificationTest.PostSystemNotification MultiProcessNotificationTest.ProfileCrossDomainPosting MultiProcessNotificationTest.UserCrossDomainPosting MultiProcessNotificationTest.SystemCrossDomainPosting - -# The following tests crash on the valgrind bot. -# See http://crbug.com/74727. -ThreadWatcherTest.ThreadNotResponding -ThreadWatcherTest.MultipleThreadsNotResponding |