src/java.base/share/classes/sun/nio/ch/NioDatagramSocketImpl.java
branchdatagramsocketimpl-branch
changeset 58688 2b1e684c3ce6
parent 58680 7e9e2f10a050
child 58697 e3ff12d14d43
--- a/src/java.base/share/classes/sun/nio/ch/NioDatagramSocketImpl.java	Thu Oct 17 21:15:33 2019 +0100
+++ b/src/java.base/share/classes/sun/nio/ch/NioDatagramSocketImpl.java	Fri Oct 18 17:08:59 2019 +0100
@@ -48,6 +48,8 @@
 import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.locks.ReentrantLock;
+import jdk.internal.access.JavaNetDatagramPacketAccess;
+import jdk.internal.access.SharedSecrets;
 import jdk.internal.ref.CleanerFactory;
 import sun.net.PlatformDatagramSocketImpl;
 import sun.net.ResourceManager;
@@ -65,6 +67,9 @@
 
     private static final NativeDispatcher nd = new SocketDispatcher();
 
+    private static final JavaNetDatagramPacketAccess DATAGRAM_PACKET_ACCESS =
+            SharedSecrets.getJavaNetDatagramPacketAccess();
+
     private static final int MAX_PACKET_LEN = 65536;
 
     private static final ProtocolFamily family = family();
@@ -410,7 +415,7 @@
         Objects.requireNonNull(p);
         byte[] b = p.getData();
         int off = p.getOffset();
-        int len = b.length - off;
+        int len = DATAGRAM_PACKET_ACCESS.getBufLengthField(p);
         assert len >= 0;
         if (len > MAX_PACKET_LEN)
             len = MAX_PACKET_LEN;
@@ -441,7 +446,7 @@
                     p.setAddress(sender.getAddress());
                 if (p.getPort() != sender.getPort())
                     p.setPort(sender.getPort());
-                p.setLength(n);
+                DATAGRAM_PACKET_ACCESS.setLengthField(p, n);
             } catch (IOException e) {
                 // #### reset packet offset and length! ??
                 throw e;