Author: toad
Date: 2006-01-27 16:34:08 +0000 (Fri, 27 Jan 2006)
New Revision: 7951

Modified:
   trunk/freenet/src/freenet/io/comm/UdpSocketManager.java
   trunk/freenet/src/freenet/node/Version.java
Log:
402:
Chasing impossible cosmic-ray random exit bug.

Modified: trunk/freenet/src/freenet/io/comm/UdpSocketManager.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/UdpSocketManager.java     2006-01-27 
16:08:49 UTC (rev 7950)
+++ trunk/freenet/src/freenet/io/comm/UdpSocketManager.java     2006-01-27 
16:34:08 UTC (rev 7951)
@@ -94,44 +94,11 @@

        public void run() { // Listen for packets
                try {
-                       while (/*_active*/true) {
-                               try {
-                                       DatagramPacket packet = getPacket();
-                                       // Check for timedout _filters
-                                       removeTimedOutFilters();
-                                       // Check for matched _filters
-                                       if (packet != null) {
-                                               Peer peer = new 
Peer(packet.getAddress(), packet.getPort());
-                                               byte[] data = packet.getData();
-                                               int offset = packet.getOffset();
-                                               int length = packet.getLength();
-                                               if (lowLevelFilter != null) {
-                                                       try {
-                                                               
lowLevelFilter.process(data, offset, length, peer);
-                                                               
Logger.minor(this,
-                                                                               
"Successfully handled packet length " + length);
-                                                       } catch (Throwable t) {
-                                                               
Logger.error(this, "Caught " + t + " from "
-                                                                               
+ lowLevelFilter, t);
-                                                       }
-                                               } else {
-                                                       // Create a bogus 
context since no filter
-                                                       Message m = 
decodePacket(data, offset, length,
-                                                                       new 
DummyPeerContext(peer));
-                                                       if (m != null)
-                                                               checkFilters(m);
-                                               }
-                                       } else
-                                               Logger.minor(this, "Null 
packet");
-                               } catch (Throwable t) {
-                                       Logger.error(this, "Caught " + t, t);
-                                       System.err.println("Caught "+t);
-                                       t.printStackTrace(System.err);
-                               }
-                       }
+                       runLoop();
                } catch (Throwable t) {
-                       System.err.println("Caught "+t);
-                       t.printStackTrace(System.err);
+                       // Impossible? It keeps on exiting. We get the below,
+                       // but not this...
+                       System.err.println(t.getMessage());
                } finally {
                        System.err.println("run() exiting");
                        Logger.error(this, "run() exiting");
@@ -142,6 +109,48 @@
                }
        }

+       private void runLoop() {
+               while (/*_active*/true) {
+                       try {
+                               realRun();
+                       } catch (Throwable t) {
+                               Logger.error(this, "Caught " + t, t);
+                               System.err.println("Caught "+t);
+                               t.printStackTrace(System.err);
+                       }
+               }
+       }
+       
+       private void realRun() {
+               DatagramPacket packet = getPacket();
+               // Check for timedout _filters
+               removeTimedOutFilters();
+               // Check for matched _filters
+               if (packet != null) {
+                       Peer peer = new Peer(packet.getAddress(), 
packet.getPort());
+                       byte[] data = packet.getData();
+                       int offset = packet.getOffset();
+                       int length = packet.getLength();
+                       if (lowLevelFilter != null) {
+                               try {
+                                       lowLevelFilter.process(data, offset, 
length, peer);
+                                       Logger.minor(this,
+                                                       "Successfully handled 
packet length " + length);
+                               } catch (Throwable t) {
+                                       Logger.error(this, "Caught " + t + " 
from "
+                                                       + lowLevelFilter, t);
+                               }
+                       } else {
+                               // Create a bogus context since no filter
+                               Message m = decodePacket(data, offset, length,
+                                               new DummyPeerContext(peer));
+                               if (m != null)
+                                       checkFilters(m);
+                       }
+               } else
+                       Logger.minor(this, "Null packet");
+       }
+       
        /**
         * Decode a packet from data and a peer.
         * Can be called by LowLevelFilter's.

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-01-27 16:08:49 UTC (rev 
7950)
+++ trunk/freenet/src/freenet/node/Version.java 2006-01-27 16:34:08 UTC (rev 
7951)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       public static final int buildNumber = 401;
+       public static final int buildNumber = 402;

        /** Oldest build of Fred we will talk to */
        public static final int lastGoodBuild = 400;


Reply via email to