> On 27 Dec 2019, at 08:44, Anuraag Agrawal <anura...@gmail.com> wrote:
> 
> ...
> On Tue, Dec 24, 2019 at 11:57 PM Chris Hegarty <chris.hega...@oracle.com 
> <mailto:chris.hega...@oracle.com>> wrote:
> 
> ...
> I think that this mainly looks good. A few small comments:
> 
> 1) If getAdapters returns an error ( ret != ERROR_SUCCESS ), then there will 
> be a JNI pending exception, right? so loadDNSConfig0 should not 
> unconditionally throw OOME.
> 
> Thanks for noticing this. Previously, any failure to malloc would return 
> STS_ERROR and loadDNSConfig0 would throw OOME, while any other type of error 
> (e.g., getAdaptersInfo returning an error) is ignored. In the current patch, 
> failure to malloc sets OOME, otherwise a generic Error, and then the code 
> tries to throw OOME which would probably cause a crash due to throwing two 
> exceptions in a row without clearing (it's hard to repro the error case so 
> not entirely sure).
> 
> To restore the old behavior, I would have to check the result of getAdapters 
> and only throw if the exception is OOME, and ignore exceptions of type Error 
> which are generated here
> 
> https://github.com/openjdk/jdk/blob/master/src/java.base/windows/native/libnet/NetworkInterface_winXP.c#L114
>  
> <https://github.com/openjdk/jdk/blob/master/src/java.base/windows/native/libnet/NetworkInterface_winXP.c#L114>
>  
> 
> Alternatively if leaving the exception of getAdapters as is and just remove 
> the current JNU_ThrowOutOfMemoryError in loadDNSConfig0, we will throw Error 
> when a random failure of GetAdapterAddresses happens. This is probably an 
> incompatible change and not acceptable but just want to confirm.
> 
> Also it would be possible to skip getAdapters exceptions that are not OOME in 
> C or in Java. It would be great to hear what the recommended pattern would be.

One approach would be to only throw if there is no pending exception, e.g.

    211     } else if (!(*env)->ExceptionOccurred(env)) {
    212         JNU_ThrowOutOfMemoryError(env, "native memory allocation 
failed");
    213     }

But looking at this again, I think that the OOM is not needed at all with the 
new code, since loadDNSConfig is not itself doing a malloc ( any more ) - and 
this catch-all style is great anyway.

>  ...
> 
> 3) I wonder if we should bump MAX_STR_LEN, while here?
> 
> Seems like a good idea - I don't know what a good value for this is but 
> noticed another location uses 1K so have raised it to that in my local copy.


That seems fine to me.

-Chris.


Reply via email to