Author: toad
Date: 2007-02-03 14:14:54 +0000 (Sat, 03 Feb 2007)
New Revision: 11652

Modified:
   trunk/freenet/src/freenet/io/comm/UdpSocketManager.java
Log:
Don't create a new byte[] and DatagramPacket each time.

Modified: trunk/freenet/src/freenet/io/comm/UdpSocketManager.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/UdpSocketManager.java     2007-02-02 
18:39:16 UTC (rev 11651)
+++ trunk/freenet/src/freenet/io/comm/UdpSocketManager.java     2007-02-03 
14:14:54 UTC (rev 11652)
@@ -214,10 +214,13 @@
        }

        private void realRun() {
-               DatagramPacket packet = getPacket();
+               // Single receiving thread
+               byte[] buf = new byte[MAX_RECEIVE_SIZE];
+               DatagramPacket packet = new DatagramPacket(buf, buf.length);
+               boolean gotPacket = getPacket(packet);
                // Check for timedout _filters
                removeTimedOutFilters();
-               if (packet != null) {
+               if (gotPacket) {
                        long startTime = System.currentTimeMillis();
                        Peer peer = new Peer(packet.getAddress(), 
packet.getPort());
                        long endTime = System.currentTimeMillis();
@@ -280,22 +283,19 @@
     // Revert to 1500?
     private static final int MAX_RECEIVE_SIZE = 2048;

-    private DatagramPacket getPacket() {
-               // TODO: Avoid recreating the packet each time (warning, there 
are some issues reusing DatagramPackets, be
-               // careful)
-               DatagramPacket packet = new DatagramPacket(new 
byte[MAX_RECEIVE_SIZE], MAX_RECEIVE_SIZE);
+    private boolean getPacket(DatagramPacket packet) {
                try {
                        _sock.receive(packet);
                        // TODO: keep?
                        IOStatisticCollector.addInfo(packet.getAddress() + ":" 
+ packet.getPort(),
                                        packet.getLength(), 0);
                } catch (SocketTimeoutException e1) {
-                       packet = null;
+                       return false;
                } catch (IOException e2) {
                        throw new RuntimeException(e2);
                }
                if(logMINOR) Logger.minor(this, "Received packet");
-               return packet;
+               return true;
        }

        private void removeTimedOutFilters() {


Reply via email to