--- old/src/jdk.net/linux/classes/jdk/internal/net/rdma/LinuxRdmaSocketImpl.java 2018-11-28 16:36:30.900693139 +0000 +++ new/src/jdk.net/linux/classes/jdk/internal/net/rdma/LinuxRdmaSocketImpl.java 2018-11-28 16:36:30.528693152 +0000 @@ -34,6 +34,15 @@ class LinuxRdmaSocketImpl extends PlatformRdmaSocketImpl { + private static final UnsupportedOperationException unsupported; + + private static final Void checkSupported() { + if (unsupported != null) + throw new UnsupportedOperationException(unsupported.getMessage(), unsupported); + else + return null; + } + static { java.security.AccessController.doPrivileged( new java.security.PrivilegedAction<>() { @@ -43,10 +52,20 @@ return null; } }); - initProto(); + UnsupportedOperationException uoe = null; + try { + initProto(); + } catch (UnsupportedOperationException e) { + uoe = e; + } + unsupported = uoe; + } + + public LinuxRdmaSocketImpl() { + this(checkSupported()); } - public LinuxRdmaSocketImpl() { } + private LinuxRdmaSocketImpl(Void unused) { } static final RdmaSocketOptions rdmaOptions = RdmaSocketOptions.getInstance(); @@ -80,7 +99,7 @@ } } - static native void initProto(); + static native void initProto() throws UnsupportedOperationException; private static native boolean isRdmaAvailable0();