On Wed, 17 Feb 2021 10:30:45 GMT, Chris Hegarty <che...@openjdk.org> wrote:

>> In another bug  this question from me  was answered by  Alan Bateman :
>> 
>> Btw. while adjusting Java_sun_nio_ch_sctp_SctpChannelImpl_receive0 , I 
>> started to wonder what happens to the allocated memory in the same file in 
>> handleSendFailed ( if ((addressP = malloc(dataLength)) == NULL) ) in early 
>> return cases incl. the CHECK_NULL , is there some deallocation missing there 
>> too ?
>> 
>> 
>> Yes, the error paths in handleSendFailed should be looked at. If 
>> NewDirectByteBuffer or recvmsg fails then addressP needs to be freed. 
>> Furthermore, if the NewObject fails and bufferObj != NULL then the memory 
>> for the direct buffer will need to be freed too (as JNI NewDirectByteBuffer 
>> does not setup a cleaner).
>> 
>> 
>> So I added freeing of the malloced memory to handleSendFailed .
>> Please review !
>> 
>> Thanks, Matthias
>
> Marked as reviewed by chegar (Reviewer).

This changes look good to me.  Additionally, and separately, I have filed 
JDK-8261881.

>From 8261881 : The SCTP implementation uses NewDirectByteBuffer to create a 
>new direct byte-buffer in native code. Such creations of a direct byte-buffer 
>are not automatically associated with a Cleaner, therefore the native memory 
>associated with the buffer may not be released when the buffer is no longer 
>reachable. 

The Java code that results in the native NewDirectByteBuffer should be examined 
with a view to creating a cleaner and assigning it to the direct byte-buffer.

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

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

Reply via email to