summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-04 06:13:55 +0000
committerrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-04 06:13:55 +0000
commit4ab4ae67224d00b4ff162fc201442e7933f6df4d (patch)
treeab32d56745b0f19f58750e5baaafec74eb3d0c3a
parente66c8d775d9ea5e244dae38cb9c9ee1ae846f763 (diff)
downloadchromium_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.cc28
-rw-r--r--tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt5
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