On Tue, 1 Feb 2022 19:33:22 GMT, Roman Kennke <rken...@openjdk.org> wrote:

>> src/jdk.jdwp.agent/share/native/libjdwp/invoker.c line 240:
>> 
>>> 238:     }
>>> 239:     error = methodSignature(method, NULL, &request->methodSignature,  
>>> NULL);
>>> 240:     if (error != JVMTI_ERROR_NONE) {
>> 
>> Shouldn't this be done when the invoke has completed rather than at the 
>> start of the next invoke? Otherwise you potentially have one outstanding 
>> allocation for every thread, and you still have a leak when the thread exits.
>
>> Shouldn't this be done when the invoke has completed rather than at the 
>> start of the next invoke? Otherwise you potentially have one outstanding 
>> allocation for every thread, and you still have a leak when the thread exits.
> 
> Yes, perhaps. Please help me, where would be a good and reliable place to do 
> that? Towards the end of invoker_doInvoke() ?

In `invoker_completeInvokeRequest()` this appears to be the last reference:

`        jbyte returnType = 
methodSignature_returnTag(request->methodSignature);`

I would suggest freeing outside of the `if (!detached)` block and setting it to 
`NULL`. You might want to add an assert for `NULL` where you are currently 
freeing the pointer.

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

PR: https://git.openjdk.java.net/jdk/pull/7306

Reply via email to