-
Content Count
4,122 -
Joined
-
Last visited
-
Days Won
22
Content Type
Profiles
Forums
Calendar
Everything posted by madf
-
То есть, относится только к мускулу?
-
Это не глюк, это скорее фича. Но если напрягает можно сделать так: заменить в user.cpp строки (1498-1497): user->lastCashAddTime = *const_cast<time_t *>(&stgTime); user->lastCashAdd = newCash - oldCash; на if (newCash > oldCash) { user->lastCashAddTime = *const_cast<time_t *>(&stgTime); user->lastCashAdd = newCash - oldCash; }
-
Я думаю, ты что-то поломал в исходниках плагина file_store
-
Чревато потерями части детальной статистики
-
В корень пишется только детальная статистика или вся база?
-
Ну что непонятно-то? Найди процесс который занимает порт авторизатора и разберись, почему он его занимает. Возможно, ты пытаешся запустить второй экземпляр старгейзера.
-
А попробуйте-ка вот это: http://local.com.ua/forum/index.php?showto...mp;#entry106287
-
Хм, это проявляется для единичных пользователей?
-
Кажется, кто-то уже лицензировал
-
Дело в том, что: $ find ./ -name \*cpp -exec grep inet_ntostr {} \; | wc -l 67
-
Есть результаты? Можешь кинуть мне патчи (относительно stg-2.405)?
-
А что говорит date на серваке?
-
1. На сколько неправильное время? Пару примеров, пожалуйста.
-
Проблема, которую решает патч, описана тут: http://local.com.ua/forum/index.php?showtopic=10568
-
К стати, только сейчас заметил. Твой скрипт OnDisconnect не учитывает возможность того, что правило для пользователя может быть в нескольких экземплярах в таблице (например, 2 OnConnect подряд обязательно приведут к такой ситуации). Так что скрипт, возможно, отрабатывает. Но как минимум 1 правило остается, по этому у юзера есть инет.
-
1. Переконнекчивается ли авторизатор (сам и по принуждению)? 1.1 Если нет - скажи свой мейл, я вышлю 2 патча. 1.2 Если да - через какое время он переконнекчивается сам?
-
1. Проверь скрипт OnDisconnect 2. Либо последствия падений, либо у тебя в конфиге указано запускать 5 Executers
-
Зачем ваять то что уже сделано? thread-safe - это когда функция не имеет состояния. В данном случае состоянием является буфер, в который записывается строковое представление. Для того чтобы сделать преобразование thread-safe достаточно принимать на вход внешний буфер, что и делает inet_ntop. Но дело в том, что для этого внешний буфер нужно распределить - а это усложняет использование функции. То есть, вместо, например такого: printfd(__FILE__, "IP: %s\n", inet_ntoa(ip)); Прийдется писать нечто вроде: char buff[32]; inet_ntop(AF_INET, ip, buff, 32); printfd(__FILE__, "IP: %s\n", buff); К
-
Извиняться незачто. Если бы не этот топик - вряд-ли я когда-нибуть обратил бы внимание на эту проблему. Переписать inet_ntostr на использование inet_ntop (к стати, inet_ntoa сейчас обозначена как deprecated) можно. Но она сама по себе не thread-safe и проблема не исчезнет. Сейчас из дому почему-то не могу получить доступа к CVS, но решение проблемы есть. Оставил запись в багтреккере. В понедельник постараюсь заняться ней...
-
К стати, проверка currIP > 0 тоже не нужна. currIP - это PROPERTY, проинстанцированный для типа uint32_t, который не может принимать отрицательных значений.
-
find/grep/wc показал около 11 вхождений inet_ntoa (в основном - отладочный вывод) и аж 67 inet_ntostr - обёртки над inet_ntoa. К стати, это так же может быть причиной падений, обсуждаемых тут:http://local.com.ua/forum/index.php?showtopic=12719
-
Откуда вобще возникает эта ошибка. Дело в том, что функция inet_ntoa ни разу не thread-safe. Она использует статически распределенный буфер для хранения результатов своей работы. Одновременный ее вызов приводит к неопределенному поведению.
-
inet_ntoa возвращает указатель на char. "[inet_ntoa error]" - это тоже указатель на char. Сравнение указателей не эквивалентно сравнению строк. А поскольку эти две страки буду распределены в совершенно разной памяти - указатели никогда не совпадут. Именно по этому это условие никогда не выполнится. Класс std::string имеет переопределенный оператор ==, что позволяет записыват сравнение строк с его использованием.