On Friday 11 January 2008 23:06, robert at freenetproject.org wrote:
> 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();
> +     }
>  }

Can NPE. Not all MessageItem's have an msg. Some have a whole retransmittable 
packet.
> 
> 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);
> +             }
> +     }

Probably better to have separate queues, maybe an array of queues.
> +     
>       /**
>        * 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]);
>               }
>       }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20080112/4a5dbff0/attachment.pgp>

Reply via email to