tst-threadcomplete: fix race between t2 running and t1 destroying
sched::thread *t2 = nullptr; sched::thread *t1 = new sched::thread([&]{ // wait for the t2 object to exist (not necessarily run) sched::thread::wait_until([&] { return t2 != nullptr; }); if (quick) { return; } sched::thread::sleep_until(nanotime() + 10_ms); }, sched::thread::attr(sched::cpus[0])); t2 = new sched::thread([&]{ t1->wake(); }, sched::thread::attr(sched::cpus[1])); t1->start(); t2->start(); delete t1 delete t2; t1 may start, complete, and be destroyed before t2 gets a chance to run. In this case the call to t1->wake() will access deallocated memory. Fix by making sure t1 is only destroyed after t2 completes. Reviewed-by:Glauber Costa <glommer@cloudius-systems.com> Signed-off-by:
Avi Kivity <avi@cloudius-systems.com>
Please register or sign in to comment