[freenet-cvs] r11652 - trunk/freenet/src/freenet/io/comm

toad at freenetproject.org toad at freenetproject.org
Sat Feb 3 14:14:55 UTC 2007


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() {




More information about the cvs mailing list