src/java.base/share/classes/java/net/DatagramPacket.java
branchdatagramsocketimpl-branch
changeset 58688 2b1e684c3ce6
parent 58679 9c3209ff7550
--- a/src/java.base/share/classes/java/net/DatagramPacket.java	Thu Oct 17 21:15:33 2019 +0100
+++ b/src/java.base/share/classes/java/net/DatagramPacket.java	Fri Oct 18 17:08:59 2019 +0100
@@ -25,6 +25,9 @@
 
 package java.net;
 
+import jdk.internal.access.JavaNetDatagramPacketAccess;
+import jdk.internal.access.SharedSecrets;
+
 /**
  * This class represents a datagram packet.
  * <p>
@@ -367,12 +370,36 @@
      * @since 1.1
      */
     public synchronized void setLength(int length) {
+        setLengthField(length);
+        this.bufLength = this.length;
+    }
+
+    private synchronized void setLengthField(int length) {
         if ((length + offset) > buf.length || length < 0 ||
-            (length + offset) < 0) {
+                (length + offset) < 0) {
             throw new IllegalArgumentException("illegal length");
         }
         this.length = length;
-        this.bufLength = this.length;
+    }
+
+    private synchronized int getBufLength() {
+        return bufLength;
+    }
+
+    static {
+        SharedSecrets.setJavaNetDatagrtamPacketAccess(
+            new JavaNetDatagramPacketAccess() {
+                @Override
+                public int getBufLengthField(DatagramPacket packet) {
+                    return packet.getBufLength();
+                }
+
+                @Override
+                public void setLengthField(DatagramPacket packet, int length) {
+                    packet.setLengthField(length);
+                }
+            }
+        );
     }
 
     /**