Would we ever want to switch over to using libstdc++ threads? On Tue, Mar 5, 2019 at 3:12 PM Leif Hedstrom <zw...@apache.org> wrote:
> I still think it might be time to investigate if eliminating this > abstraction is better. Like I said, we only support posix threads anyways > so this abstraction is just extra overhead I assume ? > > — Leif > > > On Mar 4, 2019, at 09:57, Fei Deng <f...@verizonmedia.com.invalid> > wrote: > > > > I don't like setting cancel state and type myself either, but at the > time I > > couldn't come up with other ways of making sure the thread are in the > right > > state/type. I think the idea just returning a pthread_t to the plugin is > a > > good idea, it can also solve the problem with the set state/type, I > didn't > > know we are allowed to return that information since we wrapped it so > deep. > > > >> On Thu, Feb 28, 2019 at 11:02 PM Leif Hedstrom <zw...@apache.org> > wrote: > >> > >> Good points. > >> > >> And, is here even a reason to keep our own thread APIs? We only support > >> posix threads anyways. > >> > >> — Leif > >> > >>> On Feb 28, 2019, at 21:46, James Peach <jpe...@apache.org> wrote: > >>> > >>> > >>> > >>>> On Feb 28, 2019, at 9:17 AM, Fei Deng <duke8...@apache.org> wrote: > >>>> > >>>> void TSThreadSetCancelState(TSThread thread, int state); > >>>> void TSThreadSetCancelType(TSThread thread, int type); > >>> > >>> I guess you are supposed to pass PTHREAD_CANCEL_* for type type > >> parameter? I don't like how this leaks the pthread implementation. An > API > >> should be self-contained. you also don't capture the possible EINVAL > return > >> value here. > >>> > >>>> void TSThreadCancel(TSThread thread); > >>> > >>> I'm generally -1 on pthread cancellation since I feel like it is very > >> hard to use without leaking resources. Maybe your use case can be > solved by > >> an in-band notification to the thread that it should exit (e.g. atomic > >> variable, massage send, file descriptor signal) that is then > synchronized > >> on the thread join. > >>> > >>> Maybe diligent application of pthread_cleanup_push(3) can make > >> cancellation more robust, but that's not part of this proposal. > >>> > >>> FWIW I'd be sympathetic to a general API that just returns the > >> underlying pthread_t so you can color outside the lines if needed: > >>> > >>> void *TSThreadGetPlatformThread((TSThread) > >>> > >>>> void *TSThreadJoin(TSThread thread); > >>> > >>> This seems quite reasonable. > >>> > >>>> > >>>> 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. > >>> > >> > >> > >