Integrated: 8295810: cleanup debug agent removeThread() api
Chris Plummer
cjplummer at openjdk.org
Tue Oct 25 16:32:37 UTC 2022
On Sat, 22 Oct 2022 03:05:07 GMT, Chris Plummer <cjplummer at openjdk.org> 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 <cjplummer at openjdk.org>
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
More information about the serviceability-dev
mailing list