@@ -323,19 +323,55 @@ public static int getDnsNegativeCachePolicy()
323323 return InetAddressCachePolicy .getNegative ();
324324 }
325325
326+
327+ static volatile Field setFiled$InetAddressCachePolicy = null ;
328+ static volatile Field negativeSet$InetAddressCachePolicy = null ;
329+
326330 static void setCachePolicy0 (boolean isNegative , int seconds )
327331 throws NoSuchFieldException , IllegalAccessException {
328332 if (seconds < 0 ) {
329333 seconds = -1 ;
330334 }
331335
332- Class <?> clazz = InetAddressCachePolicy .class ;
333- Field cachePolicyFiled = clazz .getDeclaredField (
336+ final Class <?> clazz = InetAddressCachePolicy .class ;
337+ final Field cachePolicyFiled = clazz .getDeclaredField (
334338 isNegative ? "negativeCachePolicy" : "cachePolicy" );
335339 cachePolicyFiled .setAccessible (true );
336340
341+ final Field setField ;
342+ if (isNegative ) {
343+ if (negativeSet$InetAddressCachePolicy == null ) {
344+ synchronized (InetAddressCacheUtil .class ) {
345+ if (negativeSet$InetAddressCachePolicy == null ) {
346+ try {
347+ negativeSet$InetAddressCachePolicy = clazz .getDeclaredField ("propertyNegativeSet" );
348+ } catch (NoSuchFieldException e ) {
349+ negativeSet$InetAddressCachePolicy = clazz .getDeclaredField ("negativeSet" );
350+ }
351+ negativeSet$InetAddressCachePolicy .setAccessible (true );
352+ }
353+ }
354+ }
355+ setField = negativeSet$InetAddressCachePolicy ;
356+ } else {
357+ if (setFiled$InetAddressCachePolicy == null ) {
358+ synchronized (InetAddressCacheUtil .class ) {
359+ if (setFiled$InetAddressCachePolicy == null ) {
360+ try {
361+ setFiled$InetAddressCachePolicy = clazz .getDeclaredField ("propertySet" );
362+ } catch (NoSuchFieldException e ) {
363+ setFiled$InetAddressCachePolicy = clazz .getDeclaredField ("set" );
364+ }
365+ setFiled$InetAddressCachePolicy .setAccessible (true );
366+ }
367+ }
368+ }
369+ setField = setFiled$InetAddressCachePolicy ;
370+ }
371+
337372 synchronized (InetAddressCachePolicy .class ) { // static synchronized method!
338373 cachePolicyFiled .set (null , seconds );
374+ setField .set (null , true );
339375 }
340376 }
341377
0 commit comments