]> git.stg.codes - stg.git/commitdiff
Виправлено помилку що призводила до масових дисконнектів після масових
authorMaxim Mamontov <faust@gts.dp.ua>
Thu, 3 Feb 2011 14:23:05 +0000 (16:23 +0200)
committerMaxim Mamontov <faust@gts.dp.ua>
Thu, 3 Feb 2011 14:23:05 +0000 (16:23 +0200)
коннектів
close #14

projects/rscriptd/listener.cpp

index 82dd631855d3272b5890b7c7309a207f9483dc8d..814eb1d8e7ae77590f3ccebf4a7e00de36abdc1c 100644 (file)
@@ -331,16 +331,10 @@ return false;
 //-----------------------------------------------------------------------------
 void LISTENER::ProcessPending()
 {
-std::list<PendingData> localPending;
-
-    {
-    STG_LOCKER lock(&mutex, __FILE__, __LINE__);
-    printfd(__FILE__, "Pending data size: %d\n", pending.size());
-    localPending.swap(pending);
-    }
-
-std::list<PendingData>::iterator it(localPending.begin());
-while (it != localPending.end())
+std::list<PendingData>::iterator it(pending.begin());
+size_t count = 0;
+printfd(__FILE__, "Pending: %d\n", pending.size());
+while (it != pending.end() && count < 256)
     {
     std::vector<AliveData>::iterator uit(
             std::lower_bound(
@@ -381,7 +375,10 @@ while (it != localPending.end())
             }
         }
     ++it;
+    ++count;
     }
+STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+pending.erase(pending.begin(), it);
 }
 //-----------------------------------------------------------------------------
 void LISTENER::ProcessTimeouts()