RFR[10]: 8187658: Bigger buffer for GetAdaptersAddresses
Ivan Gerasimov
ivan.gerasimov at oracle.com
Mon Sep 25 20:58:16 UTC 2017
Thank you Roger for review!
On 9/25/17 11:47 AM, Roger Riggs wrote:
> Hi Ivan,
>
> Looks ok to me.
>
> I don't see a reason to skimp on the additional size since it is
> allocated and then freed immediately.
> The increment might as well be as big as the initial size.
>
Right. Let's use the same value of 15K, which reduces the number of
variables to operate with.
> I don't see a reason to retry if the buffer gets close to ULONG_MAX;
> I'd just break the for loop
> and let it fail. (but the new code is just doing what the old code did
> and retry even if the buffer did not increase).
>
If len is close to ULONG_MAX, it is still larger value of len returned
by the previous call to GetAdaptersAddresses (otherwise we wouldn't have
gotten ERROR_BUFFER_OVERFLOW.)
So, if we're in the loop, there's no way the buffer will not increase
(unless there's a failure due to OOM, of course.)
> Also, please introduce a constant for the number of retries; it will
> make it clearer
> and not need to hard code it in two places.
Done!
Would you please take a look at the updated webrev:
http://cr.openjdk.java.net/~igerasim/8187658/01/webrev/
With kind regards,
Ivan
> (I would probably have coded the retry count counting down to zero but
> its the same effect).
>
> Regards, Roger
>
>
> On 9/25/2017 1:03 PM, Ivan Gerasimov wrote:
>> Ping.
>>
>> Please review the proposed change at your convenience.
>>
>> The fix will greatly reduce the possibility of a need to reallocate
>> the buffer to retrieve the results (something that the documentation
>> strongly suggests to avoid), and, if such reallocation still occurs
>> to be necessary, will increase number of retries.
>>
>> With kind regards,
>> Ivan
>>
>>
>> On 9/19/17 10:50 AM, Ivan Gerasimov wrote:
>>> Hello!
>>>
>>> When retrieving information about network interfaces on Windows we
>>> make up to 2 attempts to call GetAdaptersAddresses().
>>>
>>> It was reported that in very rare cases it may not be sufficient,
>>> and even the second attempt can fail with ERROR_BUFFER_OVERFLOW.
>>>
>>> I suggest that we follow the recommendation given in MSDN [1]:
>>> increase the initial buffer size to 15K and do up to 3 attempts to
>>> call GetAdaptersAddresses().
>>>
>>> BUGURL: https://bugs.openjdk.java.net/browse/JDK-8187658
>>> WEBREV: http://cr.openjdk.java.net/~igerasim/8187658/00/webrev/
>>>
>>> Would you please help review the fix?
>>>
>>> [1]
>>> https://msdn.microsoft.com/en-us/library/windows/desktop/aa365915(v=vs.85).aspx
>>>
>>
>
>
--
With kind regards,
Ivan Gerasimov
More information about the net-dev
mailing list