Jump to content

Patch Stg_ip_erase_after_error.patch


Recommended Posts

Данный патч исправляет баг описанный тут http://local.com.ua/forum/index.php?showto...indpost&p=54300

 

Сразу скажу что C++ не мой родной язык, так что на абсолютную правльность не претендует.

 

В процессе изучения бага в DEBUG режиме было выяснено что он происходит в любом случае когда одному пользователю с данного IP ответило ошибкой, то с этого IP не сможет зайти ни один другой пользователь до тех пор пока не войдет первый или ребута биллинга. Это связано с неудалением ip из массива пользователей.

 

Если у кого-то есть идеи по более правильному решению этой ошибки будет хорошо, надеюсь что автор или уважаемые патчеписатели обратят внимание на эту проблему.

 

--- projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp.old      2007-01-20 14:47:05.000000000 +0300
+++ projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp  2007-06-16 17:40:12.000000000 +0400
@@ -957,8 +957,21 @@
        printfd(__FILE__, "SendError_8 %d bytes sent\n", res);
        break;
    }

+    map<uint32_t, IA_USER>::iterator it;
+    it = ip2user.find(ip);
+
+    if (it != ip2user.end())
+    {
+        map<uint32_t, IA_USER>::iterator itNext = ++it;
+        ip2user.erase(--it);
+        it = itNext;
+        printfd(__FILE__, "User %s erased\n", inet_ntostr(ip));
+    }
+    else
+        printfd(__FILE__, "User %s NOT erased, not found in map\n", inet_ntostr(ip));
+
return 0;
}
//-----------------------------------------------------------------------------
int AUTH_IA::Send(uint32_t ip, const char * buffer, int len)

Link to post
Share on other sites
  • 1 month later...

Хм, а что делает этот код ?

+        map<uint32_t, IA_USER>::iterator itNext = ++it;
+        ip2user.erase(--it);
+        it = itNext;

 

не проше ли было ?

+        ip2user.erase(it);

Link to post
Share on other sites
Сразу скажу что C++ не мой родной язык, так что на абсолютную правльность не претендует.

 

...

 

Если у кого-то есть идеи по более правильному решению этой ошибки будет хорошо

2platerx:

Человек сразу написал, что не претендует на оптимальность.

Поэтому, если есть идеи, поделитесь)

Link to post
Share on other sites

Вообщем могу отписать что патч рождает после себя глюки с не отключаемыми пользователями при переходе из месяца в месяц, который мне непонятен, в дебаг режиме его так и не ловил.

Link to post
Share on other sites
  • 3 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...