gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r2189 - GNUnet/src/server


From: grothoff
Subject: [GNUnet-SVN] r2189 - GNUnet/src/server
Date: Thu, 13 Oct 2005 13:00:08 -0700 (PDT)

Author: grothoff
Date: 2005-10-13 13:00:07 -0700 (Thu, 13 Oct 2005)
New Revision: 2189

Modified:
   GNUnet/src/server/connection.c
Log:
a crack at 950

Modified: GNUnet/src/server/connection.c
===================================================================
--- GNUnet/src/server/connection.c      2005-10-13 19:42:24 UTC (rev 2188)
+++ GNUnet/src/server/connection.c      2005-10-13 20:00:07 UTC (rev 2189)
@@ -2053,6 +2053,8 @@
   didAssign = YES;
   /* in the first round we cap by 2* previous utilization */
   firstRound = YES;
+  for (u=0;u<activePeerCount;u++)
+    entries[u]->idealized_limit = 0;
   while ( (schedulableBandwidth > CONNECTION_MAX_HOSTS_ * 100) &&
          (activePeerCount > 0) &&
          (didAssign == YES) ) {
@@ -2065,6 +2067,8 @@
        unsigned int share;
 
        share = entries[u]->idealized_limit + (unsigned int) (shares[u] * 
schedulableBandwidth);
+       if (share < entries[u]->idealized_limit) 
+         share = 0xFFFFFFFF;  /* int overflow */
        if ( (share > adjustedRR[u] * 2) &&
             (firstRound == YES) )
          share = adjustedRR[u] * 2;
@@ -2083,10 +2087,12 @@
       for (u=0;u<activePeerCount;u++) {
        unsigned int v = perm[u]; /* use perm to avoid preference to 
low-numbered slots */
        if ( (firstRound == NO) ||
-            (entries[v]->idealized_limit / 2 < adjustedRR[u]) ) {
+            (entries[v]->idealized_limit < adjustedRR[u] * 2) ) {
          unsigned int share;
 
          share = entries[v]->idealized_limit + (unsigned int) 
(schedulableBandwidth);
+         if (share < entries[u]->idealized_limit) 
+           share = 0xFFFFFFFF;  /* int overflow */
          if ( (firstRound == YES) &&
               (share > adjustedRR[u] * 2) )
            share = adjustedRR[u] * 2;
@@ -2101,9 +2107,13 @@
           (activePeerCount > 0) ) {
        /* assign rest disregarding traffic limits */
        perm = permute(WEAK, activePeerCount);
-       for (u=0;u<activePeerCount;u++)
-         entries[perm[u]]->idealized_limit
-           += (unsigned int) (schedulableBandwidth/activePeerCount);   
+       for (u=0;u<activePeerCount;u++) {
+         unsigned int share;
+
+         share = entries[perm[u]]->idealized_limit + (unsigned int) 
(schedulableBandwidth/activePeerCount);    
+         if (share > entries[perm[u]]->idealized_limit) /* no int-overflow? */
+           entries[perm[u]]->idealized_limit = share;
+       }
        schedulableBandwidth = 0;
        FREE(perm);
        perm = NULL;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]