Author: toad
Date: 2008-02-15 16:12:53 +0000 (Fri, 15 Feb 2008)
New Revision: 17945

Modified:
   trunk/freenet/src/freenet/node/PacketSender.java
Log:
Don't run directly unless safe to do so.

Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java    2008-02-15 16:12:03 UTC 
(rev 17944)
+++ trunk/freenet/src/freenet/node/PacketSender.java    2008-02-15 16:12:53 UTC 
(rev 17945)
@@ -56,6 +56,7 @@
        private long timeLastSentOldOpennetConnectAttempt;
        private Vector rpiTemp;
        private int[] rpiIntTemp;
+       private boolean started = false;

        PacketSender(Node node) {
                resendPackets = new LinkedList();
@@ -148,10 +149,12 @@
                        t1.setDaemon(true);
                        t1.start();
                }
+               started = true;
                myThread.start();
        }

        public void run() {
+               if(logMINOR) Logger.minor(this, "In PacketSender.run()");
                freenet.support.Logger.OSThread.logPID(this);
                while(true) {
                        lastReceivedPacketFromAnyNode = lastReportedNoPackets;
@@ -463,10 +466,13 @@
        }

        public void queueTimedJob(Runnable job, long offset) {
-               if(offset <= 0) {
+               // Run directly *if* that won't cause any priority problems.
+               if(offset <= 0 && started && !NativeThread.usingNativeCode()) {
+                       if(logMINOR) Logger.minor(this, "Running directly: 
"+job);
                        node.executor.execute(job, "Scheduled job: " + job);
                        return;
                }
+               if(offset < 0) offset = 0;
                long now = System.currentTimeMillis();
                Long l = new Long(offset + now);
                synchronized(timedJobsByTime) {
@@ -483,5 +489,8 @@
                                timedJobsByTime.put(l, jobs);
                        }
                }
+               if(offset < MAX_COALESCING_DELAY) {
+                       wakeUp();
+               }
        }
 }


Reply via email to