On Sat, 22 Oct 2022 03:05:07 GMT, Chris Plummer <[email protected]> wrote:
> The implementation of removeThread() is currently:
>
>
> static void
> removeThread(JNIEnv *env, ThreadList *list, jthread thread)
> {
> ThreadNode *node;
>
> node = findThread(list, thread);
> if (node != NULL) {
> removeNode(list, node);
> clearThread(env, node);
> }
> }
>
> However, currently all callers already have the ThreadNode*, so they end up
> calling like the following:
>
> ` removeThread(env, list, node->thread);`
>
> So we go from a ThreadNode* to a jthread, only to do a findThread() to get
> the ThreadNode* again. Also, the list is stored in the ThreadNode.
> removeThread() can instead be implemented as:
>
>
> static void
> removeThread(JNIEnv *env, ThreadNode *node)
> {
> JDI_ASSERT(node != NULL);
> removeNode(node->list, node);
> clearThread(env, node);
> }
>
>
> This is faster, although not by as much as you might think. TLS is used to
> map a jthread to a ThreadNode*, so the findThread() call is actually already
> pretty fast. The exception is when dealing with the otherThreads list. These
> threads have not yet been started, so TLS cannot be used, but it is rare for
> threads to appear on this list. Still, this is a good cleanup to do, and
> should be a bit faster.
>
> This cleanup was initially implemented as part of the work for
> [JDK-8295376](https://bugs.openjdk.org/browse/JDK-8295376), but is being
> split out.
This pull request has now been integrated.
Changeset: 6289600f
Author: Chris Plummer <[email protected]>
URL:
https://git.openjdk.org/jdk/commit/6289600fe86bf1f8de160ea64cdba960b2d3e693
Stats: 16 lines in 1 file changed: 1 ins; 8 del; 7 mod
8295810: cleanup debug agent removeThread() api
Reviewed-by: kevinw, sspitsyn, amenkov
-------------
PR: https://git.openjdk.org/jdk/pull/10828