----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/26783/ -----------------------------------------------------------
(Updated Oct. 22, 2014, 6:55 p.m.) Review request for mesos, Benjamin Hindman and Niklas Nielsen. Changes ------- Created JIRA Bugs: MESOS-1968 https://issues.apache.org/jira/browse/MESOS-1968 Repository: mesos-git Description ------- There is a race condition in Latch. The same pid can be terminated by 2 seperate threads simultaneously. Diffs ----- 3rdparty/libprocess/src/latch.cpp 89185ec Diff: https://reviews.apache.org/r/26783/diff/ Testing ------- make check The following test could segfault before: (after this patch it does not) ``` auto do_launch = []() { std::mutex mut; std::condition_variable cond; bool ready = true; Latch *latch = new Latch(); const size_t num_iter = 10000; std::thread t1([&]() { for (size_t i = 0; i < num_iter; ++i) { { std::unique_lock<std::mutex> lock(mut); while (!ready) { cond.wait(lock); } ready = false; } latch->trigger(); } }); std::thread t2([&]() { for (size_t i = 0; i < num_iter; ++i) { latch->await(); delete latch; latch = new Latch(); std::lock_guard<std::mutex> lock(mut); ready = true; cond.notify_one(); } }); t1.join(); t2.join(); }; const size_t nthread = 16; std::vector<std::thread> tvec; for (size_t i = 0; i < nthread; ++i) { tvec.emplace_back(do_launch); } for (auto& t : tvec) { t.join(); } ``` Thanks, Joris Van Remoortere