From: Maxim Mamontov <faust@gts.dp.ua>
Date: Fri, 24 Dec 2010 14:56:19 +0000 (+0200)
Subject: Змімено спосіб зберігання TRAFF_STATS після невдалого запису
X-Git-Tag: 2.407-rc3~221
X-Git-Url: https://git.stg.codes/stg.git/commitdiff_plain/9e2edd39ec2cb1989f6261b1dc5e6c09373ee33d?ds=sidebyside

Змімено спосіб зберігання TRAFF_STATS після невдалого запису
---

diff --git a/projects/stargazer/user.cpp b/projects/stargazer/user.cpp
index 989d11b5..48b8094c 100644
--- a/projects/stargazer/user.cpp
+++ b/projects/stargazer/user.cpp
@@ -940,22 +940,18 @@ Run();
 //-----------------------------------------------------------------------------
 int USER::WriteDetailStat(bool hard)
 {
-printfd(__FILE__, "USER::WriteDetailedStat() - queue size = %d\n", traffStatQueue.size());
+printfd(__FILE__, "USER::WriteDetailedStat() - saved size = %d\n", traffStatSaved.second.size());
 
-if (!traffStatQueue.empty())
+if (!traffStatSaved.second.empty())
     {
-    std::list<std::pair<time_t, TRAFF_STAT> >::iterator it;
-    for (it = traffStatQueue.begin(); it != traffStatQueue.end(); ++it)
+    if (store->WriteDetailedStat(traffStatSaved.second, traffStatSaved.first, login))
         {
-        if (store->WriteDetailedStat(it->second, it->first, login))
-            {
-            printfd(__FILE__, "USER::WriteDetailStat() - failed to write detail stat from queue\n");
-            WriteServLog("Cannot write detail stat from queue (of size %d recs) for user %s.", traffStatQueue.size(), login.c_str());
-            WriteServLog("%s", store->GetStrError().c_str());
-            return -1;
-            }
-        traffStatQueue.erase(it++);
+        printfd(__FILE__, "USER::WriteDetailStat() - failed to write detail stat from queue\n");
+        WriteServLog("Cannot write detail stat from queue (of size %d recs) for user %s.", traffStatSaved.second.size(), login.c_str());
+        WriteServLog("%s", store->GetStrError().c_str());
+        return -1;
         }
+    traffStatSaved.second.erase(traffStatSaved.second.begin(), traffStatSaved.second.end());
     }
 
 TRAFF_STAT ts;
@@ -977,8 +973,11 @@ if (ts.size() && !disabledDetailStat)
         if (!hard)
             {
             printfd(__FILE__, "USER::WriteDetailStat() - pushing detail stat to queue\n");
-            traffStatQueue.push_back(std::make_pair(lastWriteDeatiledStat, ts));
+            STG_LOCKER lock(&mutex, __FILE__, __LINE__);
+            traffStatSaved.second.swap(ts);
+            traffStatSaved.first = lastWriteDeatiledStat;
             }
+        return -1;
         }
     }
 lastWriteDeatiledStat = stgTime;
diff --git a/projects/stargazer/user.h b/projects/stargazer/user.h
index 8e338463..392a121b 100644
--- a/projects/stargazer/user.h
+++ b/projects/stargazer/user.h
@@ -233,7 +233,7 @@ private:
     const TARIFF *  tariff;
 
     TRAFF_STAT      traffStat;
-    std::list<std::pair<time_t, TRAFF_STAT> > traffStatQueue;
+    std::pair<time_t, TRAFF_STAT> traffStatSaved;
 
     const SETTINGS * settings;