Author: robert
Date: 2008-01-11 23:06:54 +0000 (Fri, 11 Jan 2008)
New Revision: 17020

Modified:
   trunk/freenet/src/freenet/node/MessageItem.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
implement simple queue priorities (does not affect coalescing delays)


Modified: trunk/freenet/src/freenet/node/MessageItem.java
===================================================================
--- trunk/freenet/src/freenet/node/MessageItem.java     2008-01-11 21:20:36 UTC 
(rev 17019)
+++ trunk/freenet/src/freenet/node/MessageItem.java     2008-01-11 23:06:54 UTC 
(rev 17020)
@@ -72,4 +72,8 @@
                        }
                }
        }
+       
+       public short getPriority() {
+               return msg.getSpec().getPriority();
+       }
 }

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2008-01-11 21:20:36 UTC 
(rev 17019)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2008-01-11 23:06:54 UTC 
(rev 17020)
@@ -16,6 +16,7 @@
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.ListIterator;
 import java.util.Vector;
 import java.util.zip.DataFormatException;
 import java.util.zip.Inflater;
@@ -951,7 +952,7 @@
                reportBackoffStatus(now);
                int x = 0;
                synchronized(messagesToSendNow) {
-                       messagesToSendNow.addLast(item);
+                       enqueuePrioritizedMessageItem(item);
                        Iterator i = messagesToSendNow.iterator();
                        for(; i.hasNext();) {
                                MessageItem it = (MessageItem) (i.next());
@@ -981,6 +982,20 @@
                return x;
        }

+       private void enqueuePrioritizedMessageItem(MessageItem addMe) {
+               synchronized (messagesToSendNow) {
+                       //Assume it goes on the end, both the common case and 
an accelerator for requeueing.
+                       ListIterator 
i=messagesToSendNow.listIterator(messagesToSendNow.size());
+                       while (i.hasPrevious()) {
+                               MessageItem here=(MessageItem)i.previous();
+                               //While the item we are adding is a HIGHER 
priority, move on (backwards...)
+                               if (!(addMe.getPriority() < here.getPriority()))
+                                       break;
+                       }
+                       i.add(addMe);
+               }
+       }
+       
        /**
         * Returns the number of milliseconds that it is estimated to take to 
transmit the currently queued packets.
         */
@@ -1169,7 +1184,7 @@
                synchronized(messagesToSendNow) {
                        for(int i = offset; i < offset + length; i++)
                                if(messages[i] != null)
-                                       messagesToSendNow.add(messages[i]);
+                                       
enqueuePrioritizedMessageItem(messages[i]);
                }
        }



Reply via email to