public void run() { // Listen for packets tracker.startReceive(System.currentTimeMillis()); try { runLoop(); } catch (Throwable t) { // Impossible? It keeps on exiting. We get the below, // but not this... try { System.err.print(t.getClass().getName()); System.err.println(); } catch (Throwable tt) { } ; try { System.err.print(t.getMessage()); System.err.println(); } catch (Throwable tt) { } ; try { System.gc(); System.runFinalization(); System.gc(); System.runFinalization(); } catch (Throwable tt) { } try { Runtime r = Runtime.getRuntime(); System.err.print(r.freeMemory()); System.err.println(); System.err.print(r.totalMemory()); System.err.println(); } catch (Throwable tt) { } ; try { t.printStackTrace(); } catch (Throwable tt) { } ; } finally { System.err.println("run() exiting for UdpSocketHandler on port " + _sock.getLocalPort()); Logger.error(this, "run() exiting for UdpSocketHandler on port " + _sock.getLocalPort()); synchronized (this) { _isDone = true; notifyAll(); } } }