I thought about doing that, but that requires a lot of inter thread communication, and we might need to change all the other threads to do it the new way. It could be a better way moving forward, but these apis will solve the problem right now and we can fix the real problem later.
On Thu, Feb 28, 2019 at 12:08 PM Walt Karas <wka...@verizonmedia.com.invalid> wrote: > Maybe we should have two different types of shutdowns? Analogous to the > difference between 'kill' and 'kill -9'. If we wanted to have a really > crude but effective approach: > > // Increment this just before you start doing something you don't want a > shutdown to leave partially done. > // Decrement it when it is done or is abandoned due to error. > std::atomic<unsigned> i_am_doing_something; > > std::atomic<bool> waiting_to_shut_down; > > You're not allowed to start anything new when waiting_to_shut_down is > true. A normal shutdown would set waiting_to_shutdown to true, then wait > for i_am_doing_something to be zero. > > In practice, i_am_doing_something should probably be a mutex-protected > unordered_map. You put in source file name, line number and a cookie of > some sort when you start something, remove this object when you're done. > If the fail-safe timeout for a clean shutdown expired, ATS would log the > contents of the i_am_doing_something map, and then shut down ugly. > > On Thu, Feb 28, 2019 at 11:17 AM Fei Deng <duke8...@apache.org> wrote: > > > void TSThreadSetCancelState(TSThread thread, int state); > > void TSThreadSetCancelType(TSThread thread, int type); > > void TSThreadCancel(TSThread thread); > > void *TSThreadJoin(TSThread thread); > > > > Some plugins have been causing a lot of crashes during ATS shutdown, the > > root cause is due plugin threads are not aware of ATS is shutting down > and > > still trying to do stuff such as initiating ssl handshake. The workaround > > right now is to set a flag using the newly implemented > > `SHUTDOWN_LIFECYCLE_HOOK`, but there will still be race conditions since > > some threads have a very long turnaround time. > > > > These new APIs expose corresponding pthread calls so plugins can have a > > better control of its own threads. > > >