Revision: 451
http://vde.svn.sourceforge.net/vde/?rev=451&view=rev
Author: rd235
Date: 2010-11-23 23:18:34 +0000 (Tue, 23 Nov 2010)
Log Message:
-----------
new comments in the priority queue management (wirefilter)
Modified Paths:
--------------
trunk/vde-2/src/wirefilter.c
Modified: trunk/vde-2/src/wirefilter.c
===================================================================
--- trunk/vde-2/src/wirefilter.c 2010-11-23 23:05:44 UTC (rev 450)
+++ trunk/vde-2/src/wirefilter.c 2010-11-23 23:18:34 UTC (rev 451)
@@ -445,12 +445,16 @@
/* packet queues are priority queues implemented on a heap.
* enqueue time = dequeue time = O(log n) max&mean
*/
+/* the delay is evaluated in milliseconds, several packets can be
+ scheduled at the same "when" time. Counter preserve the fifoness. */
static void packet_dequeue()
{
struct timeval v;
gettimeofday(&v,NULL);
unsigned long long now=(unsigned long
long)v.tv_sec*1000+v.tv_usec/1000;
+ /* the next packet (min time, min counter) is in the root of
+ the packetqueue heap */
while (npq>0 && pqh[1]->when <= now) {
struct packpq *old=pqh[npq--];
int k=1;
@@ -458,15 +462,19 @@
writepacket(pqh[1]->dir,pqh[1]->buf,pqh[1]->size);
free(pqh[1]->buf);
free(pqh[1]);
+ /* rebuild the heap */
while (k<= npq>>1)
{
int j= k<<1;
+ /* choose the min between pqh[2k] and pqh[2k+1] */
if (j<npq &&
(pqh[j]->when > pqh[j+1]->when ||
(pqh[j]->when == pqh[j+1]->when &&
pqh[j]->counter >
pqh[j+1]->counter)
)
) j++;
+ /* if old must be put here, okay else move the min up
and
+ continue the rebuilding phase */
if (old->when < pqh[j]->when ||
(old->when == pqh[j]->when &&
old->counter < pqh[j]->counter)
@@ -523,7 +531,9 @@
exit (1);
}
}
- {int k=++npq;
+ {
+ int k=++npq;
+ /* add the new element to the heap */
while (new->when < pqh[k>>1]->when ||
(new->when == pqh[k>>1]->when && new->counter <
pqh[k>>1]->counter)) {
pqh[k]=pqh[k>>1];
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
_______________________________________________
vde-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vde-users