diff options
| author | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-12-08 22:18:19 +0000 |
|---|---|---|
| committer | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-12-08 22:18:19 +0000 |
| commit | e9665479e4c145ffbe6f5c4ff16195ddf573d931 (patch) | |
| tree | 1b10de67d14a2f0f7e219cd654f11f9b8924e4f9 | |
| parent | 383be66e74b67a98160e8dd086bf29e39ee507ae (diff) | |
| download | ppe42-gcc-e9665479e4c145ffbe6f5c4ff16195ddf573d931.tar.gz ppe42-gcc-e9665479e4c145ffbe6f5c4ff16195ddf573d931.zip | |
* testsuite/30_threads/async/async.cc: Fix race condition in test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205795 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | libstdc++-v3/ChangeLog | 4 | ||||
| -rw-r--r-- | libstdc++-v3/testsuite/30_threads/async/async.cc | 25 |
2 files changed, 14 insertions, 15 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a814fd5855e..b9536b448bb 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,7 @@ +2013-12-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + * testsuite/30_threads/async/async.cc: Fix race condition in test. + 2013-12-08 Paolo Carlini <paolo.carlini@oracle.com> * testsuite/20_util/add_const/requirements/explicit_instantiation.cc: diff --git a/libstdc++-v3/testsuite/30_threads/async/async.cc b/libstdc++-v3/testsuite/30_threads/async/async.cc index 1f94494d0a3..05fd23cc96a 100644 --- a/libstdc++-v3/testsuite/30_threads/async/async.cc +++ b/libstdc++-v3/testsuite/30_threads/async/async.cc @@ -29,23 +29,18 @@ using namespace std; -struct work { - typedef void result_type; - void operator()(mutex& m, condition_variable& cv) - { - unique_lock<mutex> l(m); - cv.notify_one(); - } -}; +void work(mutex& m) +{ + unique_lock<mutex> l(m); +} void test01() { mutex m; - condition_variable cv; unique_lock<mutex> l(m); - future<void> f1 = async(launch::async, work(), ref(m), ref(cv)); - cv.wait(l); - f1.get(); + future<void> f1 = async(launch::async, &work, ref(m)); + l.unlock(); // allow async thread to proceed + f1.get(); // wait for it to finish } void test02() @@ -53,15 +48,15 @@ void test02() bool test __attribute__((unused)) = true; mutex m; - condition_variable cv; unique_lock<mutex> l(m); - future<void> f1 = async(launch::async, work(), ref(m), ref(cv)); + future<void> f1 = async(launch::async, &work, ref(m)); std::future_status status; status = f1.wait_for(std::chrono::milliseconds(1)); VERIFY( status == std::future_status::timeout ); status = f1.wait_until(std::chrono::system_clock::now()); VERIFY( status == std::future_status::timeout ); - cv.wait(l); + l.unlock(); // allow async thread to proceed + f1.wait(); // wait for it to finish status = f1.wait_for(std::chrono::milliseconds(0)); VERIFY( status == std::future_status::ready ); status = f1.wait_until(std::chrono::system_clock::now()); |

