gentoo.ru
Официальная конференция Direct Connect клиента EiskaltDC++
eiskaltdc@conference.gentoo.ru
Вторник, 11 июня 2013< ^ >
Tehnick установил(а) тему: Конференция разработчиков EiskaltDC++ | Conference of EiskaltDC++ developers
Site: https://code.google.com/p/eiskaltdc/
Logs: http://gentoo.ru/jabber/logs/eiskaltdc@conference.gentoo.ru/2013/
Bug tracker: https://code.google.com/p/eiskaltdc/issues/list
Notes for developers: https://code.google.com/p/eiskaltdc/wiki/notes_for_developers
How To Ask Questions The Smart Way: http://catb.org/%7Eesr/faqs/smart-questions.html
Как правильно задавать вопросы: http://parallel.ru/cluster/smart-questions-ru.html
Last stable release: 2.2.7 (2012-05-29)
Release schedule:
* 2013-06-16 Release EiskaltDC++ 2.2.8
Конфигурация комнаты
Участники комнаты

GMT+4
[00:04:50] soulhunter вошёл(а) в комнату
[00:07:58] soulhunter вышел(а) из комнаты
[00:12:29] gelraen вышел(а) из комнаты
[00:12:50] Diger вошёл(а) в комнату
[00:13:00] gelraen вошёл(а) в комнату
[00:25:33] gelraen вышел(а) из комнаты
[00:26:13] gelraen вошёл(а) в комнату
[00:39:54] soulhunter вошёл(а) в комнату
[00:50:13] soulhunter вышел(а) из комнаты
[01:00:56] soulhunter вошёл(а) в комнату
[01:06:17] soulhunter вышел(а) из комнаты
[01:07:08] gelraen вышел(а) из комнаты
[01:07:18] gelraen вошёл(а) в комнату
[01:09:24] soulhunter вошёл(а) в комнату
[01:48:47] soulhunter вышел(а) из комнаты
[02:49:35] gelraen вышел(а) из комнаты: Replaced by new connection
[02:49:45] gelraen вошёл(а) в комнату
[08:17:44] Alexey вошёл(а) в комнату
[08:24:35] flylinkdc вошёл(а) в комнату
[08:26:07] <flylinkdc> Всем привет.
[08:26:16] <flylinkdc> 2Tehnick - ты писал о падении в https://github.com/eiskaltdcpp/eiskaltdcpp/blob/master/dht/DHT.cpp#L102
[08:27:23] <flylinkdc> Посмотрите код флая https://code.google.com/p/flylinkdc/source/browse/trunk/dht/DHT.cpp
[08:28:29] <flylinkdc> Вообще лучше в meld сравнить папку dht с флаевским - мы там кое что меняли... может что замержите и поможет.
[08:54:17] ONYX вышел(а) из комнаты
[09:31:51] ONYX вошёл(а) в комнату
[09:45:31] mars1an вошёл(а) в комнату
[10:06:22] gelraen вышел(а) из комнаты
[10:06:43] gelraen вошёл(а) в комнату
[10:30:40] Tehnick вошёл(а) в комнату
[10:30:45] <Tehnick> flylinkdc: привет.
[10:32:19] <Tehnick> flylinkdc: я пофиксил уже:
https://github.com/eiskaltdcpp/eiskaltdcpp/commit/b031715
[10:58:39] <flylinkdc> ок. такого во флае нет. вечером проверю. а у вас падало стабильно?
[10:59:38] <Tehnick> flylinkdc: нет, через раз. Но 100% воспроизводимости я добился, когда просто отключил сеть на ноуте.
[11:01:18] <Tehnick> flylinkdc: sock был -1 и FD_ISSET(sock, rfdp) приводило к ошибке.
[11:02:48] <flylinkdc> у нас тоже тут падало - https://www.box.net/shared/t3apqdurqxzicy4bg1h0
[11:03:09] <flylinkdc> вечеромпроверю и заберу фикс. спасибо. а кто делал sock инвалидным?
[11:08:31] <Tehnick> flylinkdc: насколько я понял, close() отрабатывал раньше, чем завершался wait(). Но я могу ошибаться...
[11:08:58] <flylinkdc> вообще странно. FD_ISSET не должна падать при подаче на вход INVALID_SOCKET
[11:09:12] <flylinkdc> или под линуксом это так?
[11:09:22] <Tehnick> В моей системе --- да.
[11:09:27] <Tehnick> Причем недавно.
[11:09:38] <Tehnick> После перехода на новую libc.
[11:09:57] <Tehnick> До этого ничего подобного не было.
[11:10:03] <flylinkdc> может там лучше поставить еще и dcassert ?
[11:10:25] <flylinkdc> чтобы разработчики увидели это место под дебагом
[11:10:30] <flylinkdc> может проблема в чем-то другом
[11:11:28] <Tehnick> Кстати. В убунту libc значительно раньше обновили. И как следствие:
https://bugs.launchpad.net/glibc/+bug/996804
[11:12:21] Diger вошёл(а) в комнату
[11:12:28] <Tehnick> flylinkdc: вполне возможно, что мой костыль борется со следствием. А причина в другом.
[11:12:50] <Tehnick> [10:12:30] <flylinkdc> вообще странно. FD_ISSET не должна падать при подаче на вход INVALID_SOCKET
А вот это надо проверить.
[11:13:05] <Tehnick> На других системах...
[11:13:11] <flylinkdc> также наверно лучше сделать не return 0 а return WAIT_NONE; магические числа путают
[11:13:25] <flylinkdc> или просто return waitFor;
[11:13:44] <flylinkdc> я вечером на ноуте тоже сеть подергаю
[11:13:57] <Tehnick> Я вначале так и сделал. А потом передумал. Там выше в коде уже есть return 0.
[11:13:58] <flylinkdc> но думаю виндовая функция не будет приводить к корке
[11:15:05] <Tehnick> [10:17:16] <flylinkdc> я вечером на ноуте тоже сеть подергаю
Я немного не точно описал ситуацию.
[11:15:18] <Tehnick> Вначале у меня инет пропал.
[11:15:34] <flylinkdc> но это ведь тоже самое что дернуть провод
[11:15:39] <flylinkdc> или нет?
[11:15:47] <Tehnick> Но к роутеру по wi-fi я был подключен и локалка на несколько компов была доступна.
[11:15:56] <Tehnick> Потом я перезапускал прогу.
[11:16:07] <Tehnick> Порты пробрасывались нормально.
[11:16:24] <Tehnick> Просто не мог подключиться к хабам.
[11:16:37] <Tehnick> И при выходе была эта самая проблема.
[11:16:40] soulhunter вошёл(а) в комнату
[11:16:46] <Tehnick> Потом инет вернулся и проблема ушла.
[11:17:03] <Tehnick> И только после этого, я уже сам ситуацию повторил
[11:17:10] <flylinkdc> такое повторить в принципе тоже можно. открубить провод от входа в роутер.
[11:17:26] <flylinkdc> я пока сдела у себя так dcassert(sock != INVALID_SOCKET); // https://github.com/eiskaltdcpp/eiskaltdcpp/commit/b031715
[11:18:01] <Tehnick> Хорошо.
[11:18:13] <Tehnick> Ждем результатов вашей проверки.
[11:22:11] Tehnick вышел(а) из комнаты
[11:22:45] <soulhunter> flylinkdc: а пробелем с buffer overflow  в коде HashManager  у вас случаем не было? :)
[11:23:31] <soulhunter> а то у меня есть проблема, но никак не могу получить бектрейс, система (Hardened Gentoo) сразу прибивает процесс и все, хана
[11:23:42] Tehnick вошёл(а) в комнату
[11:23:51] <Tehnick> soulhunter: бектрейс будет? =)
[11:23:52] <soulhunter> пишет что "buffer overflow attack detected" и kill -9
[11:24:31] <flylinkdc> привет.
[11:24:42] <soulhunter> ну я все же пытаюсь обойтись малой кровью ) увидел тут человека из флая, решил спросить, у них код hashManager вообще на наш мало похож уже
[11:24:51] <flylinkdc> как в линуксе делать это я не знаю. у флая краше тоже хватает - вот https://crash-server.com/AppVersion.aspx?ClientID=ppa&AppVersionID=86
[11:25:23] <flylinkdc> у нас краши централизованно собираются коллектором
[11:25:42] <flylinkdc> вам кстати тоже такое не помешает. наверно такое есть в линуксах
[11:26:09] <flylinkdc> а где пишет kill -9 ?
[11:26:21] <flylinkdc> в логе ядра?
[11:27:35] <Tehnick> Полагаю, что он так обычный SIGKILL описал.
[11:27:38] <soulhunter> это не пишется, это система делает, такое поведение при обнаружении подозрения на атаку. А так видел через дебагер какой сигнал приходит процессу, ну и в доках так описано
[11:28:11] <soulhunter> там именно с −9, жесткое харакири )
[11:28:25] <flylinkdc> ты можешь собрать прогу в дебаге и запустить с Valgrind ?
[11:28:59] <flylinkdc> вероятно в ядре стоит проверка и ты пытаешься в системную функцию подать не корректные параметры. вот оно и убивает процесс
[11:29:05] <soulhunter> делал уже, там есть сообщения, которые возникают именно после этих событий, но наши ребята там ничего не видели
[11:29:21] <flylinkdc> возможно в логах должно где-то писаться какой хоть вызов привел к этому
[11:29:23] <soulhunter> не увидели
[11:29:31] <Tehnick> soulhunter: выложи на пастебин и ссылку в чат
[11:29:41] <flylinkdc> +1. покажи что пишется
[11:30:35] <soulhunter> http://pastebin.com/486X0Mxz
[11:30:46] <soulhunter> все что от 33 строчки
[11:30:53] <Tehnick> soulhunter: https://ru.wikipedia.org/wiki/SIGKILL
[11:30:56] <soulhunter> до нее относится к другим вещас
[11:30:58] <Tehnick> soulhunter: это и есть -9
[11:32:01] <soulhunter> а, ну да
[11:32:07] <soulhunter> попутал с sigterm
[11:35:19] <flylinkdc> так там eiskaltdcpp-daemon виноват
[11:35:27] <flylinkdc> в хаш манагере то дургое
[11:36:09] <soulhunter> flylinkdc: проблема возникает в начале шатдауна, условия запуска клиента - без конфига, т.е с дефолтными настройками, поймать проблему можно на 1-3, 5-7, 9-11 и т.д секундах, между ними, т.е 4,8,12 и т.д проблема не возникает и завершается корректно система, при корректном завершении валгринд этих сообщений, что я скинул, не выдает, они вылезают тока после этой ошибки
[11:36:14] <soulhunter> а где ты это увидел?
[11:36:23] <soulhunter> какая строка?
[11:36:46] <flylinkdc> 33-34
[11:37:12] <soulhunter> не ну это понятно, но это тока интерфейс грубо говоря
[11:37:14] <flylinkdc> у вас мангуст используется. вы его обновите - там правят активно
[11:37:44] <soulhunter> не, мангуз тут не при чем, эти ошибки вылезают всегда, независимо от моей проблемы
[11:38:09] <soulhunter> а можно сделать и чтобы их не было
[11:38:14] <soulhunter> но проблема останется
[11:38:25] <flylinkdc> строка 45 - Invalid read of size 8
[11:39:14] <soulhunter> так?
[11:39:25] <flylinkdc> 51.
==9408==  Address 0x731f0d0 is 224 bytes inside a block of size 448 free'd
52.
==9408==    at 0x4C2ABD3: operator delete(void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
[11:39:41] <flylinkdc> вот тоже что-то опасное - похоже освобождается не то что заказывали.
[11:40:10] <soulhunter> ну dcpp::shutdown() - это ядро вроде
[11:40:48] <flylinkdc> 100.
==9408== Invalid read of size 1
101.
==9408==    at 0x4F025C7: dcpp::HashManager::Hasher::run() (HashManager.cpp:944)
[11:40:57] <flylinkdc> пока код на этих строках
[11:41:04] <flylinkdc> 944 и рядом
[11:41:19] <flylinkdc> что он там хочет прочитать инвалидно с разхмером 1
[11:42:13] <flylinkdc> а eiskaltdcpp-daemon  это обязательный компонент для работы клиента?
[11:42:18] <flylinkdc> или его можно отрубить?
[11:42:29] <flylinkdc> мангуст это ведь мелкий сервер
[11:42:36] <soulhunter> это оболочка, "консольный бинарник"
[11:42:59] <soulhunter> консольный вариант клиента, я им пользуюсь, на сервере под линуксом
[11:43:14] <flylinkdc> а т.е. ты через вебсервре управляешь
[11:43:20] <soulhunter> мангуст испоьзуется для приема команд через jsonrpc
[11:43:34] <flylinkdc> понял. я так сам никогда не пробовал
[11:44:01] <flylinkdc> может бага в мангусте приводет к порче памяти и оно каскадно валится
[11:44:50] gelraen вышел(а) из комнаты
[11:44:50] <flylinkdc> кинь мне в почту архив сиходников твоего клиента. чтобы номера строк совпадали с этим трейсом
[11:44:58] <flylinkdc> by 0x14C76F: Json::Rpc::HTTPServer::onRequest(char const*, void*) (jsonrpc_httpserver.cpp:57) вот это посмотрю
[11:45:00] gelraen вошёл(а) в комнату
[11:45:09] <soulhunter> эта проблема с мангустом вылезает тока если послать через api команду stop, а можно ее не посылать, просто SIGINT послать, тогда этот код вообще не дергается, сообщение не выводится, но проблема все равно есть
[11:45:34] <Tehnick> flylinkdc: это не его клиент. Исходники можно посмотреть в нашей репе.
[11:45:54] <soulhunter> там по мангусту будут те же строки
[11:46:08] <flylinkdc> у тебя последняя версия так падает?
[11:46:26] <soulhunter> да любая, и последняя в том числе, и годовалой давности тоже
[11:46:48] <soulhunter> это началось после обновления системы (glibc, ядро)
[11:47:02] <Tehnick> Ыыы)
[11:47:09] <Tehnick> И тут glibc...
[11:47:26] <flylinkdc> проблема в клиенте 100%
[11:47:39] <flylinkdc> грешить на ядро нужно в последнюю очередь
[11:47:40] <Tehnick> Конечно.
[11:48:37] <Tehnick> Но в glibc точно что-то изменили.
[11:48:48] <Tehnick> Более строгие проверки что ли.
[11:49:15] <Tehnick> Кстати, спасибо.
[11:49:23] <flylinkdc> в 944 строка HashManager::getInstance()->doRebuild();
[11:49:27] <Tehnick> Я сам не увидел:
==9408==    at 0x4F025C7: dcpp::HashManager::Hasher::run() (HashManager.cpp:944)
[11:49:34] <flylinkdc> странно
[11:49:43] <flylinkdc> там нужно просто doRebuild();
[11:49:54] <flylinkdc> хотя стоп
[11:50:57] <flylinkdc> ошибся. во флае этот кусок аналогичный
[11:51:40] <flylinkdc> soulhunter у тебя в 944 строке тоже эта команда стоит?
[11:51:51] <soulhunter> возможно у вас эта проблема тоже пристутствует, тока под виндой не проявляется ясно
[11:51:54] <soulhunter> явно
[11:52:08] <soulhunter> щас посмотрю, думаю да, эти файлы давно никто не правил
[11:54:04] <soulhunter> да
[11:54:06] <soulhunter> та же
[11:57:51] <flylinkdc> вот бага странная Address 0x731f0d0 is 224 bytes inside a block of size 448 free'd
[11:58:58] <flylinkdc> получается во время работы хешера и отработки sem_wait проге посылается команда завершиться
[11:59:11] <flylinkdc> выполняется dcpp::shutdown() (Singleton.h:50)
[11:59:31] <flylinkdc> и разрушается что-то другое...
[12:01:51] <Tehnick> В этом файле только один delete.
[12:01:52] <flylinkdc> а если под gdb запустить тоже падает?
[12:02:13] <flylinkdc> там стек паддения какой?
[12:02:23] <soulhunter> да, при чем стектрейс не отловить, так как sigkillи он пишет что нету процесса
[12:02:59] <flylinkdc> а делете к какому объекту? можете залогировать его sizeof()
[12:03:09] <flylinkdc> оно = 224?
[12:03:37] <flylinkdc> Ваш фикс я себе тоже забрал - http://code.google.com/p/flylinkdc/source/detail?r=14168# спасибо )
[12:03:42] <Tehnick> soulhunter: ктстати, это неправда. Бектрес ты не можешь получить, а со стектрейсом проблем быть не должно, если писать лог всех событий в программе.
[12:03:53] <Tehnick> soulhunter: правда этот лог будет ну очень большой...
[12:05:11] <flylinkdc> а под линукс еще ведь есть еще программы валидаторы в рантайме кроме valgrind ?
[12:05:13] <Tehnick> flylinkdc: может быть все-таки dcassert(sock == INVALID_SOCKET); ?
[12:05:32] <flylinkdc> блин. я дятел
[12:05:40] <flylinkdc> спасибо
[12:06:13] <flylinkdc> хотя стоп
[12:07:35] <flylinkdc> у dcassert должно быть условие истина - тогда оно не упадет под отладкой
[12:07:36] <Tehnick> flylinkdc: моя ошибка, да. =)
[12:07:41] <flylinkdc> напугал )
[12:07:47] <flylinkdc> я без теста вкоммитил
[12:08:35] <flylinkdc> а эти падения у вас под x64 кака я понял.
[12:08:45] <soulhunter> да
[12:08:45] <flylinkdc> а в x86 все хорошо?
[12:08:51] <flylinkdc> или такой нету?
[12:09:09] <soulhunter> у меня нету машины чтобы проверить
[12:09:11] <flylinkdc> можешь под виртуалькой поднять x86 аналогичную систему и там запустить ?
[12:09:20] <flylinkdc> virtualbox
[12:09:30] <soulhunter> кхм
[12:09:43] <flylinkdc> или у тебя гента?
[12:09:48] <flylinkdc> там траха много?
[12:09:49] <Tehnick> flylinkdc: полагаю, что на том сервере даже иксов нет...
[12:09:50] <soulhunter> гента
[12:10:07] <soulhunter> Tehnick: естессно
[12:10:17] <Tehnick> [12:03:09] <flylinkdc> оно = 224?
Это откуда вообще следует?
[12:10:29] <soulhunter> runlevel 3, по-моему
[12:10:31] <flylinkdc> Address 0x731f0d0 is 224 bytes inside a block of size 448 free'd
[12:10:46] <flylinkdc> пишет что при delete размеры разные
[12:10:59] <flylinkdc> когда по new делалось там в заголовок пишется размер памяти
[12:11:04] <Tehnick> О!
[12:11:13] <flylinkdc> если оно потом при делете другое то значит закус или еще что
[12:11:37] <flylinkdc> я на обед схожу. вернусь через 30 минут
[12:11:49] <soulhunter> ранний что-то обед
[12:11:56] <soulhunter> вы на стройке работаете?))
[12:12:41] <soulhunter> я вот завтракаю сижу, хотя у мен яв Калининграде 11 часов еще
[12:13:34] <Tehnick> soulhunter: во-во. Не забывай про часовые пояса.
[12:14:06] <soulhunter> дак а что, вы не на Московском времени?
[12:15:00] <Tehnick> soulhunter: у тебя доступ к серверу сейчас есть?
[12:15:07] <soulhunter> да конечно
[12:15:28] <Tehnick> soulhunter: всякие безумные правки в код вносить и проверять результат можешь?
[12:15:56] <soulhunter> тока что пересобрал с отключенным хеш менеджером (return 0 в самом начале ф-ии run()), проблема осталась, так что дело не в коде самой ф-ии
[12:16:01] <soulhunter> могу
[12:16:08] <soulhunter> смотря насколько безумные :)
[12:16:26] <soulhunter> чтобы сервер не улетел у меня из дата центра )
[12:19:49] <soulhunter> щас из мастера выгружу последний слепок
[12:20:12] ONYX вышел(а) из комнаты
[12:21:55] <soulhunter> готов
[12:22:21] <Tehnick> soulhunter: в HashManager.cpp закомментировать delete [] buf;
[12:22:36] <Tehnick> И посмотреть, что из этого выйдет.
[12:23:14] <Tehnick> Это не решение проблемы, а просто проверка идеи.
[12:25:11] <soulhunter> строка 1060?
[12:25:39] <soulhunter> и что посмотреть - вывод валгринда?
[12:26:16] <Tehnick> Да, эта строка.
[12:26:28] <Tehnick> Можно просто из gdb запустить.
[12:26:44] <Tehnick> Ты заметишь, если поведение при выходе изменится...
[12:34:06] <soulhunter> Tehnick: в общем то поменялось то же самое что и у меня менялось - при определенных правках проблема становится перманентной, т.е шансы остановить успешно в определенный момент пропадают
[12:34:08] <flylinkdc> по идее будет лик
[12:34:18] <soulhunter> а так, вывод валгринда поменялся немного
[12:34:18] <soulhunter> http://pastebin.com/5EtLzTXz
[12:34:25] <flylinkdc> или снова падает?
[12:35:20] Diger вышел(а) из комнаты
[12:35:28] <soulhunter> пропали сообщения о XXX bytes possibly lost ...
[12:35:30] <flylinkdc> осталось Address 0x7334720 is 224 bytes inside a block of size 448 free'd
[12:35:33] Diger вошёл(а) в комнату
[12:36:54] <soulhunter> дело в том, что мы в ту строку кода никогда не придем в моих условиях
[12:37:13] <soulhunter> потому что fname.empty() будет = true всегда
[12:37:18] <soulhunter> конфиг-то пустой
[12:37:30] <soulhunter> https://github.com/eiskaltdcpp/eiskaltdcpp/blob/master/dcpp/HashManager.cpp#L964
[12:37:34] <soulhunter> ничего не хешируется
[12:39:31] <flylinkdc> а вот это ваш код ServerStop() (ServerManager.cpp:74) ?
[12:39:38] <flylinkdc> такой есть файл?
[12:40:02] <soulhunter> dhamp'а
[12:40:12] <soulhunter> он демон писал
[12:40:20] <soulhunter> и пишет щас
[12:40:46] <flylinkdc> Я спрашивал про ServerManager.cpp ))
[12:41:04] <flylinkdc> счас сам скачаю сорцы себе
[12:41:46] <soulhunter> ServerManager это как раз логика управления действиями демона, часть демона
[12:44:12] <flylinkdc> падает в dcpp::shutdown();
[12:44:25] <flylinkdc> открой файло
[12:44:36] <flylinkdc> dcpp\DCPlusPlus.cpp  и найди void shutdown() {
    DebugManager::deleteInstance();
    DynDNS::deleteInstance();
[12:45:27] <soulhunter> нашел
[12:45:36] <flylinkdc> видишь там много строк разрушений?
[12:45:51] <flylinkdc> можешь между ними навтыкать такое
[12:45:58] <flylinkdc> int i = 0;
[12:46:04] <flylinkdc>     DebugManager::deleteInstance();
[12:46:14] <flylinkdc> printf("%d",++i);
[12:46:24] <flylinkdc>     DynDNS::deleteInstance();
[12:46:31] <flylinkdc> printf("%d",++i);
[12:46:34] <soulhunter> да понял
[12:46:36] <flylinkdc> и так после каждой
[12:46:39] <flylinkdc> и запусти
[12:46:48] <flylinkdc> на каком упадет шаге скажи
[12:47:58] <soulhunter> проблема в том что он не пишет ничего, там сам демон до остановки либы еще много чего пишет, я эти сообщения тоже не вижу
[12:48:18] <flylinkdc> а ну тогда заменить printf на сислог
[12:48:22] <soulhunter> щас попробую залогировать, может просто не флашится
[12:48:22] <flylinkdc> умеешь,
[12:48:56] <flylinkdc> в начале openlog("dc-debug", 0, LOG_USER);
[12:49:29] <flylinkdc> потом syslog(LOG_NOTICE,"%d",++i);
[12:49:34] <flylinkdc> между строк
[12:50:03] <flylinkdc> в конце closelog();
[12:50:12] <flylinkdc> хотя до него оно не дойде т:)
[12:50:31] <flylinkdc> потом в сислоге можно посмотреть до куда он доплевался
[12:53:18] Tehnick вышел(а) из комнаты
[12:57:33] <soulhunter> [ 66%] Building CXX object dcpp/CMakeFiles/dcpp.dir/QueueItem.cpp.o
/opt/development/eiskaltdcpp/dcpp/DCPlusPlus.cpp: In function 'void dcpp::shutdown()':
/opt/development/eiskaltdcpp/dcpp/DCPlusPlus.cpp:142:28: error: 'LOG_USER' was not declared in this scope
/opt/development/eiskaltdcpp/dcpp/DCPlusPlus.cpp:142:36: error: 'openlog' was not declared in this scope
/opt/development/eiskaltdcpp/dcpp/DCPlusPlus.cpp:144:12: error: 'LOG_NOTICE' was not declared in this scope
/opt/development/eiskaltdcpp/dcpp/DCPlusPlus.cpp:144:30: error: 'i' was not declared in this scope
/opt/development/eiskaltdcpp/dcpp/DCPlusPlus.cpp:144:31: error: 'syslog' was not declared in this scope
/opt/development/eiskaltdcpp/dcpp/DCPlusPlus.cpp:218:14: error: 'closelog' was not declared in this scope
[12:57:50] <soulhunter> надо что-то заинклюдить еще?
[12:59:01] <soulhunter> про i понятно - это я забыл просто
[13:02:14] flylinkdc вышел(а) из комнаты
[13:02:30] Tehnick вошёл(а) в комнату
[13:02:40] <Tehnick> flylinkdc: а FD_ISSET не проверял?
[13:05:34] flylinkdc вошёл(а) в комнату
[13:06:17] <flylinkdc> FD_ISSET под виндой не падает
[13:06:55] Diger вышел(а) из комнаты
[13:07:06] Diger вошёл(а) в комнату
[13:07:09] <flylinkdc>   #include <syslog.h>
[13:07:21] <flylinkdc> #ifndef _WIN32
  #include <syslog.h>
#endif
[13:08:56] <flylinkdc> soulhunter - научишь меня быстро собирать твой вариант консольного клиента  ?
[13:09:05] <flylinkdc> у меня есть VPS тестовый с убунтой 13.04
[13:09:14] <flylinkdc> я на ненй попробую повторить сам
[13:11:26] <Tehnick> flylinkdc: я пробовал у себя: не воспроизводится.
[13:13:50] <soulhunter> где теперь посмотреть лог?
[13:17:21] <flylinkdc> в /var/log/messages
[13:17:28] <flylinkdc> или /var/log/syslog
[13:17:47] <soulhunter> нету такого
[13:17:49] <soulhunter> эх
[13:18:01] <soulhunter> надо еще с сислогом разбираться
[13:18:17] <soulhunter> щас посмотрю что там с конфигом
[13:19:31] <flylinkdc> а что есть в var/log ?
[13:19:43] <flylinkdc> у тебя сислог не поднят?
[13:19:59] <flylinkdc> очень странно. в него же все проги плюются про ошибки обычно
[13:20:13] <flylinkdc> може тфайл по другому называется. по дате отсортируй и посомтри самый свежий
[13:20:36] <flylinkdc> или так cat * | grep dc-debug
[13:20:47] <flylinkdc> найдет все файлы где есть маркер dc-debug
[13:21:22] <soulhunter> нету ничего
[13:21:42] <soulhunter> ладно, щас разберемся
[13:23:20] <flylinkdc> генту никогд не видел - погугли
[13:23:35] <flylinkdc> там емерге и всегд ждут ебилдов )
[13:23:41] <flylinkdc> может на сислог тоже есть
[13:24:09] <soulhunter> да сислог поднят
[13:24:33] <soulhunter> боюсь что просто не доходит до dcpp::shutdown()
[13:24:47] <soulhunter> хотя маловероятно, но все же проверю
[13:25:04] <flylinkdc> по коду доходит
[13:25:11] <soulhunter> а, ну да!
[13:25:12] <flylinkdc> внутри него где-то падает на delete
[13:25:13] <soulhunter> блин
[13:25:16] <flylinkdc> нужно найти на каком
[13:25:17] <soulhunter> не
[13:25:36] <flylinkdc> точнее он покажет какой delete не нравится валидатору
[13:25:48] <soulhunter> не, дело в другом, смотри
[13:26:19] <soulhunter> если я просто запускаю eiskaltdcpp-daemon и торможу - он убивается и не доходит до dcpp::shutdown
[13:27:04] <soulhunter> а тот вывод это из валгринда, под ним он выводит сообщение, но не убивается, процесс продолжает работать, далее я делаю ctrl+c и тогда уже идет корректная остановка, но при остановке он выводит вот такие сообщения которые ты видел
[13:27:21] <Tehnick> [13:06:17] <flylinkdc> FD_ISSET под виндой не падает
Да не падает оно. Система останавливает прогу из-за подозрительного поведения...
[13:27:25] <flylinkdc> в это и естьпроблема
[13:27:30] <flylinkdc> нужно ее найти
[13:27:34] <flylinkdc> если с сислогом не получается может через fprintf в файло кинешь?
[13:27:52] <flylinkdc> хотя лучше сислог настрой чтобы в файл плювался
[13:32:51] <flylinkdc> soulhunter - скажи в консоле так  logger -p local0.debug "dc++test"
[13:32:58] <flylinkdc> что скажет?
[13:33:21] <flylinkdc> если проглотит поищи dc++test в /var/log
[13:33:24] <soulhunter> ничего не сказал, все норм
[13:33:42] <flylinkdc> найди в каком файле появился dc++test
[13:34:06] <Tehnick> soulhunter: /var/log/messages
[13:35:06] <flylinkdc> сказал такого файла нет у него
[13:35:15] <soulhunter> так, ладно, погодите, щас разберусь, не суетитесь )
[13:35:38] <soulhunter> тока проблема в том, что он остановится до конца нормально, смысла в этих логах?
[13:36:04] <flylinkdc> откуда такая уверенность?
[13:36:29] <soulhunter> ну я вижу что он останавливается, пишет корректно все сообщения уже после dcpp::shutdown
[13:36:41] <soulhunter> если я просто запускаю eiskaltdcpp-daemon и торможу - он убивается и не доходит до dcpp::shutdown
soulhunter
XMPP
12:30
а тот вывод это из валгринда, под ним он выводит сообщение, но не убивается, процесс продолжает работать, далее я делаю ctrl+c и тогда уже идет корректная остановка, но при остановке он выводит вот такие сообщения которые ты видел
[13:37:08] <flylinkdc> ну возможно. но сиилог ты всеже настрой
[13:37:14] <flylinkdc> это не нормально когда он не пашет ))
[13:37:25] <soulhunter> под валгриндом система почему-то не прибивает процесс, тока выводит сообщение, а дальше я уже сам его торможу по ctrl+c
[13:38:00] <flylinkdc> а под valgrind printf тоже не плююется никуда?
[13:38:34] <flylinkdc> в общем как-ой то из этих разрушений плохой. как найти какой - есть версии?
[13:42:03] <Tehnick> Есть: посмотреть трейс.
[13:42:35] <Tehnick> Из gdb.
[13:49:37] <soulhunter> так
[13:49:43] <soulhunter> нашел
[13:50:15] <soulhunter> https://github.com/eiskaltdcpp/eiskaltdcpp/blob/master/eiskaltdcpp-daemon/ServerManager.cpp#L65 вот из этой ф-ии живым процесс не выходит
[13:50:28] <soulhunter> в нее входит, а дальше не идет
[13:50:55] <soulhunter> вт она https://github.com/eiskaltdcpp/eiskaltdcpp/blob/master/eiskaltdcpp-daemon/ServerThread.cpp#L220
[13:51:00] <soulhunter> щас тут расставлю ловушки
[13:54:43] Tehnick вышел(а) из комнаты
[13:58:13] Diger вышел(а) из комнаты
[14:01:15] <soulhunter> Tehnick, flylinkdc: вот тут его прибивает https://github.com/eiskaltdcpp/eiskaltdcpp/blob/master/eiskaltdcpp-daemon/ServerThread.cpp#L221
[14:07:23] <soulhunter> а как мне в папке dcpp подключить заголовок из папки eiskaltdcpp-daemon?
[14:09:53] <soulhunter> а что вот это такое? https://github.com/eiskaltdcpp/eiskaltdcpp/blob/master/dcpp/SearchManager.cpp#L134
[14:10:10] <soulhunter> 400 это в каких единицах?
[14:16:02] <soulhunter> Tehnick, flylinkdc, пинг.. ну вот, все ушли (:
[14:18:22] <flylinkdc> если закомментить  SearchManager::getInstance()->disconnect(); то не падает?
[14:19:27] <flylinkdc> еще момент
[14:19:50] <soulhunter> что за число 400 не знаешь?
[14:19:56] <soulhunter> мс?
[14:20:26] <soulhunter> ну имеется ввиду для ф-ии socket->wait()
[14:20:31] <flylinkdc> оно не причем тут
[14:20:37] <flylinkdc> в функции void ServerThread::Close()
[14:20:57] <flylinkdc> сначала  delete server;
[14:21:04] <flylinkdc> а уже потом delete jsonserver;
[14:21:20] <flylinkdc> в конструкторе они так-же в этой последовательности создаются
[14:21:34] <flylinkdc> по идее разрушать нужно в обратном порядке
[14:21:49] <flylinkdc> поменяй блоки  #ifdef XMLRPC_DAEMON
[14:21:57] <flylinkdc> и #ifdef JSONRPC_DAEMON местами
[14:22:12] <soulhunter> закоментил, теперь не прибивает
[14:22:17] <soulhunter> все ок завершается
[14:22:50] <flylinkdc> теперь перенеси  SearchManager::getInstance()->disconnect(); в конец
[14:22:57] <flylinkdc> перед ConnectionManager::getInstance()->disconnect();
[14:23:05] <flylinkdc> пусть сначала листенеры освободятся
[14:23:20] <flylinkdc> и расскоментируй вызов
[14:23:26] <flylinkdc> будет падать?
[14:26:33] <soulhunter> ага, снова на этом вызове падает
[14:27:23] <soulhunter> так 400 это мс?
[14:27:56] <soulhunter> просто раз в 4 с как раз можно его стопорнуть и он не упадет
[14:28:10] <soulhunter> может быть и раз в 400мс соответственно, точнее даже точно
[14:36:03] <flylinkdc> virtual int wait(uint64_t millis, int waitFor);
[14:36:13] <soulhunter> вижу
[14:36:16] <soulhunter> поставил 4с
[14:36:43] <flylinkdc> поставь дебаг метки в int Socket::wait(uint64_t millis, int waitFor)
[14:36:50] <flylinkdc> там до куда доходит?
[14:36:51] <soulhunter> теперь шлю sigterm, он ждет эти 4с и потом умирает
[14:38:05] <soulhunter> а как мне включить хидер из eiskaltdcpp-daemon в папке dcpp?
[14:38:22] <soulhunter> #include ../eiskaltdcpp-daemon/header.h ?)
[14:38:24] <soulhunter> нет?
[14:38:34] <flylinkdc> да так
[14:38:41] <soulhunter> ага, щас
[14:38:43] <flylinkdc> "../
[14:38:53] <soulhunter> ну это понятно
[14:38:55] <flylinkdc> а зачем?
[14:39:01] <flylinkdc> что ты от туда хочешь забрать?
[14:39:12] <soulhunter> ну хочу включить файл с утилиткой, там логирующая ф-ия удобная
[14:39:45] <soulhunter> а для printf надо заголовки включать?
[14:39:51] <soulhunter> есла да то какой?
[14:40:13] <soulhunter> я просто не c++ разработчик, поэтому и задаю банальные вопросы бывает )
[14:40:40] <flylinkdc> stdio.h вроде
[14:41:17] <flylinkdc> #include <cstdio>
[14:41:25] <flylinkdc> http://www.cplusplus.com/reference/cstdio/printf/
[14:41:46] <flylinkdc> так ты вроде сказал что принтф тебе не плюет ничего
[14:42:19] <soulhunter> плюет, потому и не плювал, что не доходил даже до него
[14:42:21] <soulhunter> )
[14:42:54] <soulhunter> там метки после Server::stop стоят, но до стопа библиотеки, поэтому я и подумал что он еще до dcpp::shutdown умирает
[14:45:50] <flylinkdc> в int Socket::wait сейчас метки ставишь?
[14:46:05] <soulhunter> да
[14:46:06] <flylinkdc> я думаю там где-то sock становится инвалидным
[14:46:53] <flylinkdc> например тут if (FD_ISSET(sock, &wfd))
[14:47:19] <soulhunter> дык там же фиксили вроде, перед ним как раз
[14:47:38] <flylinkdc> нет фиксили ниже
[14:47:43] <flylinkdc> посмотри все тело функции
[14:47:58] <flylinkdc>   if (FD_ISSET(sock, &wfd))
  {
   return WAIT_CONNECT;
  }
[14:48:03] <flylinkdc> вот тут
[14:48:46] Diger вышел(а) из комнаты
[14:49:11] <flylinkdc> добавь перед каждым FD_ISSET вот такое  if(sock == INVALID_SOCKET) { printf("ups! ++i"); return0; }
[14:49:24] <flylinkdc> сразу увидишь что инвалидный и на каком шаге
[14:49:29] <flylinkdc> а в начала i = 0 объяви
[15:06:09] <soulhunter> неа
[15:06:12] <soulhunter> там не помогает
[15:11:02] Tehnick вошёл(а) в комнату
[15:11:11] <flylinkdc> туда не заходит?
[15:11:17] <Tehnick> Кстати, а это идея: все FD_ISSET проверить.
[15:11:22] <flylinkdc> или функция успешно проходит до конца?
[15:11:27] <soulhunter> хотя похоже что проблема там
[15:11:40] <soulhunter> https://github.com/eiskaltdcpp/eiskaltdcpp/blob/master/dcpp/SearchManager.cpp#L110
[15:11:48] <flylinkdc> FD_ISSET в линуксе это макрос?
[15:11:57] <soulhunter> вот на этой строки он падает
[15:12:05] <flylinkdc> может сделать свой макрос обвязку с проверкой
[15:12:20] <soulhunter> как буде-то реально select() возвращает сокет корявый, но почему?
[15:12:41] <flylinkdc> падает на join(); ?
[15:12:45] <soulhunter> да
[15:13:05] <soulhunter> ну как, я поставил вот в этой строке https://github.com/eiskaltdcpp/eiskaltdcpp/blob/master/dcpp/SearchManager.cpp#L134
[15:13:11] <soulhunter> 4000 мс
[15:13:20] <soulhunter> он ждет эти 4000 мс и дальше падает сразу
[15:13:29] <soulhunter> хотя в wait() я поставил проверки
[15:14:23] <soulhunter> а по коду SearchManager::disconnect() да он из join() не выходит
[15:15:22] <flylinkdc> а внутри int Socket::wait(uint64_t millis, int waitFor) метки расставь
[15:15:30] <soulhunter> дак ставил
[15:15:31] <flylinkdc> там он где умирает?
[15:15:50] <flylinkdc> номер строки где умирает
[15:16:05] <flylinkdc> внутри int Socket::wait(uint64_t millis, int waitFor) ведь проблема?
[15:16:20] <soulhunter> а join() что делает?
[15:16:29] <soulhunter> стоп
[15:16:39] <flylinkdc> открой код функции
[15:17:00] <soulhunter> у меня int Socket::wait(uint32_t millis, int waitFor)
[15:17:03] <flylinkdc> join тут не виноват. ты ведь нашел место где вешается
[15:17:12] <soulhunter> uint32_t
[15:17:16] <flylinkdc> в ней поставь
[15:17:21] <soulhunter> а у тебя 64
[15:17:28] <soulhunter> это ты по флаю смотришь?
[15:17:29] <flylinkdc> я по флаю смотрю
[15:17:35] <flylinkdc> я под виндой
[15:18:11] <flylinkdc> поставь в Socket::wait метки логов и покажи номер строки где оно сдыхает
[15:22:16] soulhunter вышел(а) из комнаты: Replaced by new connection
[15:22:26] soulhunter вошёл(а) в комнату
[15:23:19] <soulhunter> а что вообще этот FD_ISSET() делает? как раз он не должен ли проверять валидность дескриптора, судя по названию?
[15:23:53] <flylinkdc> у меня это так #define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set FAR *)(set))
[15:24:03] <flylinkdc> как в лине незнаю
[15:24:31] <flylinkdc> ты нашел номер строки?
[15:24:59] <soulhunter> да блин, странно
[15:25:06] <flylinkdc> странно что?
[15:25:09] <Tehnick> soulhunter: попробуй патчик: http://pastebin.com/raw.php?i=vkxXgqPw
[15:25:10] <flylinkdc> номер строки найди )
[15:25:49] <flylinkdc> у вас в проекте FD_ISSET встречается раз 6
[15:26:22] <flylinkdc> предлагаю если в нем проблема везде провести ревизию или заменить на инлайн функцию где делается проверка диагностиков в дебаге
[15:34:15] <soulhunter> хаха
[15:34:23] <soulhunter> у меня тут миллион этих меток повылезало
[15:34:33] <soulhunter> не один тред использует эту ф-ию )
[15:35:13] <Tehnick> soulhunter: мой патч проверь.
[15:35:58] <soulhunter> я везде перед FD_ISSET поставил проверку
[15:36:03] <soulhunter> нифига не выводит
[15:36:31] <Tehnick> Как ставил?
[15:36:48] <soulhunter> как ты писал
[15:37:04] <soulhunter> если инвалид сокет то принтф и возврат 0
[15:38:11] <soulhunter> можно как-то имя треда получить?
[15:38:16] <soulhunter> которые ее вызывает
[15:39:18] <Tehnick> А при чем тут вывод? Прога все еще убивается?
[15:39:27] <soulhunter> да
[15:40:55] <soulhunter> щас я еще потыркаюсь, погодите
[15:41:28] <soulhunter> ага, есть
[15:41:35] <soulhunter> нашел
[15:42:55] <soulhunter> Tehnick: в том же месте где твой патч
[15:43:09] <soulhunter> тока походу return 0 кому-то не нравится снаружи
[15:44:27] <soulhunter> и кажись знаю кому
[15:44:42] gelraen вышел(а) из комнаты
[15:44:52] gelraen вошёл(а) в комнату
[15:45:10] <soulhunter> если тут 0 вернуть? https://github.com/eiskaltdcpp/eiskaltdcpp/blob/2.2.x/dcpp/SearchManager.cpp#L134
[15:45:26] <soulhunter> да
[15:45:29] <soulhunter> вот оно
[15:45:51] <soulhunter> он снова входит в wait(), делает select, а там sock уже = -1
[15:48:11] <Tehnick> soulhunter: поздравляю.
[15:49:24] <Tehnick> soulhunter: while (!stop && socket->wait(400, Socket::WAIT_READ) != Socket::WAIT_READ && );
[15:49:32] <Tehnick> soulhunter: попробуй так.
[15:50:17] <Tehnick> Хотя.
[15:50:53] <Tehnick> soulhunter: попробуй, хуже не будет.
[15:50:53] <soulhunter> вообще корявый там кож
[15:50:57] <soulhunter> код
[15:51:01] <Tehnick> Ага.
[15:51:07] <Tehnick> Из флайлинка. =)
[15:51:12] <soulhunter> это должно помочь, да, но лучше поправить там код
[15:51:20] <flylinkdc> но-но
[15:51:26] <flylinkdc> это код из ядра DC++
[15:51:34] <Tehnick> flylinkdc: неа
[15:51:47] <flylinkdc> ок. дома сравню
[15:51:49] <Tehnick> flylinkdc: https://code.google.com/p/flylinkdc/source/detail?r=6132
[15:52:40] <flylinkdc> ну так это и есть мерж с DC++
[15:53:05] <flylinkdc> http://bazaar.launchpad.net/~dcplusplus-team/dcplusplus/trunk/revision/2414
[15:53:20] <flylinkdc> если пофиксите может им баг репорт пошлете?
[15:53:43] <flylinkdc> я вечером себе ваш фикс заберу
[15:53:49] <flylinkdc> для винды тоже хуже не будет
[15:54:04] <flylinkdc> не будем в функции давать лишний раз мертвый сокет
[15:54:14] <flylinkdc> всем пока я поехал домой
[15:54:18] <flylinkdc> рабочий день кончился
[15:54:22] <flylinkdc> всех с празником
[15:54:49] <Tehnick> flylinkdc: у них там другой код сейчас.
[15:55:04] <Tehnick> flylinkdc: тебя с правздником. А я в Украине...
[15:57:58] <soulhunter> бляха, неделю на эту фигню потратил ) надо было сразу по вызовам метки ставить и смотреть
[15:59:34] <soulhunter> Tehnick: раньше у меня видно проблема была та же что у тебя, а дальше пошло наружу из-за return 0, но странно что у тебя вы вылезло
[16:00:31] <soulhunter> * не вылезло
[16:02:11] <Tehnick> Если до домашнего ноута достучусь, то может сразу пофикшу.
[16:02:19] <Tehnick> Если нет, то вечнром.
[16:02:26] <Tehnick> *вечером
[16:05:14] <soulhunter> Tehnick: надо для сокетов ввести новую константу: аля ERROR
[16:05:29] <soulhunter> и возвращять ее при ошибке, чтобы можно было ошибки извне видеть если что
[16:05:51] <soulhunter> потому что щас возвращается обычный таймаут WAIT_NONE
[16:05:55] <soulhunter> он же 0
[16:06:48] <soulhunter> хотя опять же опасно может быть, надо все вызовы проверить где как результат проверяется
[16:08:09] <soulhunter> мало ли где еще всплывет подобная проблема
[16:09:00] <soulhunter> а вообще странно почему сокет ломается
[16:09:32] <soulhunter> хотя если бы он не ломался - мы бы на этом коде просто повисали тупо навсегда
[16:10:48] <soulhunter> почему select не прерывается, ничего, корректно отрабатывает полный таймаут и потом на выходе получается socket = −1?
[16:19:32] <soulhunter> короче мое предложение такое: в принципе while (!stop && …) решает проблему в данном случае, но надо все равно создать багрепорт, расписать в нем все события и потом провести ревизию, когда будет время, почему sock становится −1 (может другой поток его портит после выхода из select()?), и посмотреть может быть для этой строчки можно найти более грамотное решение
[16:20:06] <soulhunter> да и я бы везде вызовы wait() проверил заодно, не думаю что их очень много
[16:23:39] <Tehnick> sock никто не портит. Он специально выставляет в инвалидное значение после закрытия сокета.
[16:23:57] <Tehnick> Просто wait об этом не знала.
[16:24:04] <Tehnick> Я пофиксил.
[16:24:09] <Tehnick> Сейчас пушну.
[16:24:45] <Tehnick> soulhunter: попробуй мастер.
[16:24:57] <Tehnick> Без всяких дополнительных патчей.
[16:25:04] Tehnick вышел(а) из комнаты
[16:25:14] Tehnick вошёл(а) в комнату
[16:25:25] <Tehnick> А ведь я не хотел в ядро лезть...
[16:25:39] <Tehnick> И все равно прошлось фиксить.
[16:25:53] <Tehnick> soulhunter: спасибо за помощь.
[16:26:07] <Tehnick> soulhunter: тот костыль и вправду был очень плох.
[16:27:01] <Tehnick> Надеюсь, что я ничего не сломал. =)
[16:27:24] <Tehnick> А то даже компилить некогда.
[16:27:40] <soulhunter> дак а почему сокет закрывается раньше чем мы выходим из wait?
[16:27:48] <soulhunter> если так задумано, то конечно нужна проверка
[16:27:56] <Tehnick> soulhunter: посмотри на функцию close()
[16:28:22] <Tehnick> В том же классе.
[16:30:17] <Tehnick> soulhunter: и да, твоя проблема была совершенно в другом, смотри:
https://github.com/eiskaltdcpp/eiskaltdcpp/commit/c8dcf44
[16:30:35] <Tehnick> В DC++ этого бага сейчас нет.
[16:31:03] <Tehnick> А во флайлинке есть. =)
[16:31:14] <Tehnick> Полагаю, что в стронге от тоже остался.
[16:31:22] <soulhunter> да, посмотрел твой фикс, по логике должно работать нормально
[16:31:38] <soulhunter> проверю попозже, щас надо отойти
[16:31:41] <Tehnick> flylinkdc: https://flylinkdc.googlecode.com/svn-history/trunk/client/SearchManager.cpp
[16:31:50] <Tehnick> flylinkdc: это надо фиксить.
[16:32:04] Tehnick вышел(а) из комнаты
[16:38:40] gelraen вышел(а) из комнаты
[16:39:14] gelraen вошёл(а) в комнату
[16:39:42] soulhunter вышел(а) из комнаты
[16:39:52] soulhunter вошёл(а) в комнату
[17:04:13] gelraen вышел(а) из комнаты
[17:04:46] gelraen вошёл(а) в комнату
[17:17:53] gelraen вышел(а) из комнаты
[17:18:03] gelraen вошёл(а) в комнату
[18:03:26] mars1an вышел(а) из комнаты
[18:07:03] gelraen вышел(а) из комнаты
[18:07:36] gelraen вошёл(а) в комнату
[18:07:52] flylinkdc вошёл(а) в комнату
[18:09:38] <flylinkdc> Tehnick последний урл не понял на файл. что нужно фиксить в нем?
[18:10:51] Tehnick вошёл(а) в комнату
[18:11:01] <Tehnick> flylinkdc: https://github.com/eiskaltdcpp/eiskaltdcpp/commit/c8dcf44
[18:11:32] <Tehnick> flylinkdc: судя по той ссылке, у вас баг есть. А в коде DC++ его уже нет.
[18:12:29] <flylinkdc> Tehnick, я посмотрел код жц в базаре - там вообще уже все по другому
[18:12:43] <flylinkdc> но везде перед макросом проверяется валидность сокета
[18:12:55] <flylinkdc> этот твой фикс помог?
[18:13:03] <flylinkdc> оставляете его таким?
[18:13:11] <flylinkdc> или дальше будет причесывать?
[18:14:59] <Tehnick> flylinkdc: ничего не понял.
[18:15:20] <Tehnick> flylinkdc: в DC++ я ничего не писал. Только глянул, что у них сейчас.
[18:15:40] <flylinkdc> твой фикс помог исправить падение под гентой?
[18:15:47] <flylinkdc> его забирать к себе?
[18:15:51] <Tehnick> Они же добавили поддержку ipv6 и там много отличий кода.
[18:15:54] <Tehnick> *в коде
[18:16:19] <Tehnick> flylinkdc: эх...
[18:16:46] <Tehnick> flylinkdc: да, коммит надо забирать.
[18:17:31] <Tehnick> flylinkdc: ибо тот костыль создает беспонечный цикл.
[18:17:44] <Tehnick> flylinkdc: вне зависимости от системы.
[18:17:55] <Tehnick> *бесконечный
[18:18:01] <flylinkdc> а за чем там второй continue?
[18:18:09] <flylinkdc> после onData
[18:18:16] <Tehnick> Чтобы логику сохранить.
[18:18:33] <Tehnick> Бесконечный цикл у вас здесь:
while (socket->wait(400, Socket::WAIT_READ) != Socket::WAIT_READ);
[18:19:06] <flylinkdc> почему под виндой его нет?
[18:19:09] <Tehnick> Если сокет не валидный, его все равно пытается ждать...
[18:19:45] <flylinkdc> так может в начала добавить проверку валидности?
[18:20:03] <flylinkdc> в твоем коде если сокет будет не валидный всеравно вызовется wait
[18:21:12] <Tehnick> flylinkdc: в моем коде все в порядке, т.к. это всего-лишь if() внутри while(!stop).
[18:21:46] <flylinkdc> stop и валидность socket это не одно и тоже
[18:22:02] <Tehnick> flylinkdc: а в том костыле, который был:
while( true ) {
while (socket->wait(400, Socket::WAIT_READ) != Socket::WAIT_READ);
...
}
[18:22:29] <flylinkdc> проблема в том что зовется wait для не валидного сокета?
[18:22:30] <flylinkdc> так?
[18:22:35] <flylinkdc> или нет?
[18:22:38] <Tehnick> flylinkdc: нет
[18:22:50] <Tehnick> Проблема в том, что цикл бесконечный.
[18:22:59] <Tehnick> Когда сокет уже закрыт.
[18:23:41] <flylinkdc> счас проверю через закрытие сокета перед этой командой
[18:23:44] <Tehnick> А если он еще не открыт, то это полностью нормальное поведение и его нужно подождать.
[18:25:12] gelraen вышел(а) из комнаты
[18:25:22] gelraen вошёл(а) в комнату
[18:25:40] <flylinkdc> я перед вызовом закрыл сокет
[18:25:47] <flylinkdc> цикл сразу вывалился
[18:25:50] <flylinkdc> не повесился
[18:26:58] <Tehnick> Да ну, как это возможно?..
[18:27:12] <Tehnick> Что вернул socket->wait(400, Socket::WAIT_READ)?
[18:27:43] <flylinkdc> что вернул не смотрел
[18:27:51] <flylinkdc> но он сразу вышел из while
[18:28:56] <Tehnick> flylinkdc: значит, он вернул Socket::WAIT_READ
[18:29:13] <Tehnick> И пофиг, что сокет не валидный...
[18:29:19] <flylinkdc> счас сохраню в переменную посмотрю
[18:32:13] <flylinkdc> функция кидает исключение
[18:32:21] <flylinkdc> которое ловится кечем
[18:32:26] <flylinkdc> т.е. зависания нет
[18:32:36] <flylinkdc> у вас под линуксом вешается?
[18:32:54] <flylinkdc> или это теоретические предположения?
[18:34:01] <Tehnick> flylinkdc: не вешается
[18:34:41] <flylinkdc> тогда ты меня запутал\
[18:34:50] <Tehnick> Был buffer overflow при попытке чтения из невалидного сокета и процесс убивался.
[18:34:52] <flylinkdc> ты сказал что сейчас возникает бесконечный цикл
[18:35:11] <flylinkdc> тогда твой фикс не логичный
[18:35:20] <flylinkdc> нужно перед вызовом функции проверить валиденость
[18:35:29] <Tehnick> После коммита https://github.com/eiskaltdcpp/eiskaltdcpp/commit/f80aa74 там стал бесконечный цикл.
[18:35:33] <flylinkdc> или я чего-то не понимаю
[18:36:45] <Tehnick> flylinkdc: https://bazaar.launchpad.net/~dcplusplus-team/dcplusplus/trunk/view/head:/dcpp/SearchManager.cpp#L128
[18:38:17] <Tehnick> Исключения --- зло. Надо бы минимизировать их использование.
[18:39:05] <flylinkdc> исключения в С++ не зло
[18:39:23] <flylinkdc> это ключевая фича
[18:39:37] <Tehnick> Ага, можно делать небезопасный код.
[18:40:06] <flylinkdc> ладно это уже религия
[18:40:14] <Tehnick> Да и потери в производительности никого не волнуют...
[18:40:42] <flylinkdc> в нашем случае узкм местом всегда будет сеть
[18:40:48] <Tehnick> Угу.
[18:41:00] <flylinkdc> постоянные проверки кодов возврата - это низкий уровень
[18:41:03] <Tehnick> Я и не пишу, что здесь он не оправдан.
[18:42:16] <flylinkdc> ладненько. хорошо что пофиксили багу
[18:42:21] <flylinkdc> спасибо.
[18:42:44] <Tehnick> flylinkdc: ну, судя по всему, у вас она не проявлялась.
[18:43:09] <Tehnick> flylinkdc: но тот костыльный код все равно плох. Сейчас в DC++ лучше.
[18:44:11] gelraen вышел(а) из комнаты
[18:44:35] <flylinkdc> мы сильно ядро мержить из дц++ не хотели т.к. ждали стронга
[18:44:37] gelraen вошёл(а) в комнату
[18:44:39] <flylinkdc> но он похоже тоже умер
[18:46:25] <flylinkdc> а почему ты перед ->read выкинул проверку на stop?
[18:47:03] <Tehnick> flylinkdc: а нафига там дубль? stop проверяется в цикле...
[18:51:49] <flylinkdc> флаг кем меняется внутри цикла?
[18:52:01] <flylinkdc> он может же поменяться сразу после wait
[18:52:12] <flylinkdc> не дойдя до верхней проверки while
[18:54:10] <Tehnick> flylinkdc: не может, т.к. там стоит continue...
[18:54:51] Tehnick вышел(а) из комнаты
[19:44:14] gelraen вышел(а) из комнаты
[19:44:49] gelraen вошёл(а) в комнату
[20:05:16] <soulhunter> flylinkdc - другой тред меняет флаг
[20:15:19] <soulhunter> я вот тока не пойму зачем вот эта строчка https://github.com/eiskaltdcpp/eiskaltdcpp/blob/master/dcpp/SearchManager.cpp#L114
[20:15:29] <soulhunter> зачем опять откатывать stop?
[20:23:46] <soulhunter> а если в этот момент данные придут на сокет? флаг поменяется обратно на false раньше, чем завершится их обработка и опять должен глюк случиться
[20:32:13] Tehnick вошёл(а) в комнату
[20:33:08] <Tehnick> soulhunter, это совершенно другая переменная
[20:33:23] <Tehnick> Хотя стоп.
[20:34:39] <Tehnick> soulhunter, все правильно там. Это же не отключение, а разрыв связи.
[20:34:47] <Tehnick> *отключение программы
[20:35:17] <Tehnick> Потом может быть повторное открытие сокета.
[20:35:33] gelraen вышел(а) из комнаты
[20:35:43] gelraen вошёл(а) в комнату
[20:36:45] <Tehnick> soulhunter, проблема-то решена?
[20:40:19] <soulhunter> проблема да
[20:40:54] <soulhunter> а зачем там дальше в коде закрытие и переоткрытие сокета?
[20:42:51] <soulhunter> короче ладно, проблемы решили, не будем пока дальше копаться, и так уже в печенках сидит этот баг
[20:43:03] <soulhunter> чуть не дошел до пересборки ядра с ним
[20:44:34] <Tehnick> Ок.
[20:45:15] <soulhunter> Tehnick, у меня по правкам в Socket.cpp тока замечание есть
[20:45:31] <Tehnick> Какое?
[20:46:03] <soulhunter> лучше делать не "retutn 0;", а "return WAIT_NONE;", раз есть для этого константа - надо использовать ее, вдруг где что поменяется, может выплыть баг
[20:46:32] <soulhunter> строки 546, 562, 588
[20:49:16] <Tehnick> soulhunter, в той же функции уже были return 0. До моих правок.
[20:49:44] <soulhunter> ну это тоже было плохо ) подразумевалось WAIT_NONE - нету данных, таймаут
[20:50:11] <Tehnick> Что так ноль, что иначе.
[20:50:15] <Tehnick> Разницы не вижу.
[20:51:08] <soulhunter> да понятно, а вдруг изменят значение константы а в wait не посмотрят, что она не константами оперирует, а числами
[20:51:42] <soulhunter> ну это ладно, это педантизм в общем-то, но я люблю все делать четко, меньше проблем потом случайно может вылезти
[20:52:20] <Tehnick> Это было бы ну очень странное изменение. =)
[20:53:48] <soulhunter> ну, константы на то и константы, а еще чтобы логическое значение данных сразу видеть, ноль есть ноль, а видишь WAIT_NONE - сразу понимаешь что возвращаются пустые данные
[20:54:01] <soulhunter> ну отсутствие результата в данном случае
[20:54:34] <soulhunter> ну тобишь читабельнее код становится
[20:55:00] <soulhunter> ну ладно, дело ваше, я предложил просто )
[20:55:42] <soulhunter> мне на сегодня и так уже радости хватит, что теперь не падает ничего у меня
[20:57:11] <Tehnick> soulhunter, ладно, исправлю. Мне не жалко.
[20:58:50] <soulhunter> эта версия (2.2.8) прям вся вокруг поиска пляшет, и два бага и интервалы и индикатор, как он вообще раньше работал? :)
[21:01:27] <Tehnick> Нормально работал.
[21:01:32] <Tehnick> Никто не жаловался...
[21:01:42] <soulhunter> пока я не пришел
[21:01:49] <soulhunter> боль головная )
[21:03:55] <soulhunter> ладно, буду я тестировать систему свою полностью с айскальтом, посмотрю что там в api демона наколдовали, там тоже были баги, вроде как должны быть исправлены
[21:04:46] <soulhunter> dhamp, пинг, ты ворнинги по jsonrpc_httpserver и mongoose подправлять будешь? я тебе на почту кидал
[21:16:38] soulhunter вышел(а) из комнаты
[21:19:10] gelraen вышел(а) из комнаты
[21:19:33] gelraen вошёл(а) в комнату
[21:20:32] soulhunter вошёл(а) в комнату
[21:41:25] gelraen вышел(а) из комнаты
[21:41:35] gelraen вошёл(а) в комнату
[21:44:59] Nikoli вышел(а) из комнаты
[21:45:09] Nikoli вошёл(а) в комнату
[22:01:16] Alexey вышел(а) из комнаты
[22:03:51] gelraen вышел(а) из комнаты
[22:04:23] gelraen вошёл(а) в комнату
[22:05:52] <soulhunter> onyx, пинг
[22:58:56] gelraen вышел(а) из комнаты
[22:59:06] gelraen вошёл(а) в комнату
[23:31:38] ONYX вошёл(а) в комнату
[23:51:48] Tehnick вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!