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.
> >
>
>

Reply via email to