Don't check for thread running in terminateLoopSoon()
Summary: Consider this use case: thread 1: make an evb create and start thread 2 do some work evb->terminateLoopSoon() join thread 2 with a timeout thread 2: do some initialization evb->loop() Normally, this all works fine. However, if the work thread 1 has to do is sufficiently small, and no external input occurs (one of the thing the evb is doing is listening on a socket), then sometimes, terminateLoopSoon() happens before loop() is called (or at least, before loopThread_.store() happens). isRunning() in terminateLoopSoon() is false, and so stop_ is never set, and event_base_loopbreak() is never called. The join times out, and thread 2 is still running. Removing the isRunning() check gives the desired behavior. Test Plan: In my ad hoc tests, this fix caused my threads to exit when I wanted them to exit in a situation like the one above. Reviewed By: andrewcox@fb.com FB internal diff: D1455885 Tasks: 2057547
Showing
Please register or sign in to comment