On Mon, 24 Oct 2022 20:43:48 GMT, Alex Menkov <amen...@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.
>
> src/jdk.jdwp.agent/share/native/libjdwp/threadControl.c line 322:
> 
>> 320:     ThreadNode *next;
>> 321: 
>> 322:     JDI_ASSERT(list == node->list);
> 
> "list" argument is redundant
> I suggest to drop it and replace this assert with
> `ThreadList *list == node->list;`

I was almost to suggest the same.

-------------

PR: https://git.openjdk.org/jdk/pull/10828

Reply via email to