gentoo.ru
Официальная конференция Direct Connect клиента EiskaltDC++
eiskaltdc@conference.gentoo.ru
Понедельник, 30 марта 2015< ^ >
dhamp установил(а) тему: Конференция разработчиков EiskaltDC++ | Conference of EiskaltDC++ developers
Site: https://code.google.com/p/eiskaltdc/
Logs: http://gentoo.ru/jabber/logs/eiskaltdc@conference.gentoo.ru/2015/
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.9 (2013-08-29)
Release schedule:
* 2015-xx-xx Release EiskaltDC++ 2.3.0
Конфигурация комнаты
Участники комнаты

GMT+3
[02:15:58] <loooser> При запуске из консоли иногда в неё сыпется:
QTextHtmlParser::applyAttributes: Unknown color name '#101010>[20:11:54]</font><font color='
QTextHtmlParser::applyAttributes: Unknown color name '#101010>[20:11:56]</font><font color='
^^ где-то у вас там кавычка не закрыта при указании цвета...
[03:44:38] <loooser> dhamp_ : вот такой патч _почти_ работает:
diff --git a/dcpp/Socket.cpp b/dcpp/Socket.cpp
index 3201c0c..46537b0 100644
--- a/dcpp/Socket.cpp
+++ b/dcpp/Socket.cpp
@@ -581,6 +581,13 @@ int Socket::wait(uint32_t millis, int waitFor) {
     } while (result < 0 && getLastError() == EINTR);
     check(result);

+    if(FD_ISSET(sock, rfdp)) {
+        int nread;
+        int err = ioctl(sock, FIONREAD, &nread);
+        if (err == 0 && nread == 0)
+            throw SocketException(ECONNRESET);
+    }
+
     waitFor = WAIT_NONE;

     // fix buffer overflow during shutdown
После него стрейс становится таким:
09:53:05.236364 select(11, [10], [10], NULL, {0, 250000}) = 2 (in [10], out [10], left {0, 249997})
09:53:05.236404 ioctl(10, FIONREAD, [37]) = 0
09:53:05.236434 select(11, [10], [10], NULL, {0, 250000}) = 2 (in [10], out [10], left {0, 249999})
09:53:05.236470 ioctl(10, FIONREAD, [37]) = 0
т.е. в буфере на чтение лежит 37 байт, которые никто не читает, из-за чего исключение не испускается и патч не работает. Можешь вычислить где и почему сокет не читается?
[04:35:33] flylinkdc вошёл(а) в комнату
[04:51:17] flylinkdc вышел(а) из комнаты
[07:16:47] <loooser> Как в BufferedSocket.cpp получить файловый дескриптор сокета sock?
(int)sock.get() выдаёт херню какую-то...
[09:01:07] FiliN вошёл(а) в комнату
[09:08:24] flylinkdc вышел(а) из комнаты
[09:08:33] mars1an вошёл(а) в комнату
[09:08:38] flylinkdc вошёл(а) в комнату
[09:27:14] pewpew вошёл(а) в комнату
[11:50:12] mars1an вышел(а) из комнаты
[11:50:22] mars1an вошёл(а) в комнату
[11:56:30] dhamp_ вышел(а) из комнаты: Replaced by new connection
[11:56:40] dhamp_ вошёл(а) в комнату
[11:58:16] <dhamp_ > > [07:06:44] <loooser> Как в BufferedSocket.cpp получить файловый дескриптор сокета sock?
(int)sock.get() выдаёт херню какую-то...
логично, потому что sock в BufferedSocket это Socket
в самом Socket, есть SocketHandle sock и вот это уже то что ты хочешь.
[11:59:06] <loooser> не понял что ты сказал, но sock->sock вроде работает :)
[11:59:08] <dhamp_ > достать значение дескриптора сокета в bufferedSocket без модификации кода не получится
[12:02:08] <dhamp_ > loooser, ну достал молодец =) если в буффере что-то есть, то скорее всего нужно это считать. думаю там сообщение об ошибке, но оно не читается потому как мы не в том state.
[12:06:13] <loooser> dhamp_ : в начале функции  BufferedSocket::threadRead()  идёт чтение сокета и проверка результата. И когда идёт жор цпу, то выполняется следующий код:
if(left == -1) {
return; }
Надо бы проверить какая именно ошибка возникла в результате чтения. Как это сделать?
[12:06:35] <loooser> пробовал getLastError(), но компилятор ругается :(
[12:11:24] <dhamp_ > loooser, см Socket.cpp::check()
[12:11:59] <loooser> ты код напиши, я программист только методом тыка %)
[12:13:02] <dhamp_ > loooser, я пишу код
[12:15:10] <loooser> это не код, это намёки. Я там не нашёл определение этой функции
[12:18:26] <loooser> в Socket.h она определяется, но она сама испускает исключение, а я хочу просто получить номер ошибки...
[12:26:57] <dhamp_ > loooser, ну так получи =) я тебе функцию назвал
[12:27:05] <dhamp_ > где есть эта инфа
[12:34:58] GitHub_bot вошёл(а) в комнату
[12:34:58] <GitHub_bot> [eiskaltdcpp] @ivasim opened issue #291: cmake fails on "idna (headers)" https://github.com/eiskaltdcpp/eiskaltdcpp/issues/291
[12:35:08] GitHub_bot вышел(а) из комнаты
[13:54:58] dhamp_ вышел(а) из комнаты: Replaced by new connection
[13:55:08] dhamp_ вошёл(а) в комнату
[14:55:47] dhamp_ вышел(а) из комнаты: Вышел из Vacuum-IM
[15:32:33] dhamp_ вошёл(а) в комнату
[16:12:39] GitHub_bot вошёл(а) в комнату
[16:12:39] <GitHub_bot> [eiskaltdcpp] @Nikoli opened pull request #292: Icons (master...icons) https://github.com/eiskaltdcpp/eiskaltdcpp/pull/292
[16:12:49] GitHub_bot вышел(а) из комнаты
[16:34:27] <dhamp_ > Nikoli, иконки меньше места занимают или профит в чём что другом ?
[16:35:42] flylinkdc вошёл(а) в комнату
[16:46:51] <Nikoli> dhamp_ : да, меньше места
[16:47:02] <Nikoli> ну и личные данные, если бы, то удалены
[16:47:10] <Nikoli> всякие версии редакторов и т.д.
[16:51:26] flylinkdc вышел(а) из комнаты
[17:53:05] <flylinkdc> а чем ты эти данные удалял?
[17:53:33] <flylinkdc> там я гляжу и png от флая есть
[17:55:42] <flylinkdc> а. одну команду нашел optipng -o7 $(find -iname '*.png')
[17:55:42] FiliN вышел(а) из комнаты
[17:56:17] <flylinkdc> вторую тоже exiftool -all= -overwrite_original $(find -iname '*.png')
[17:56:31] <flylinkdc> а это штука под любым линуксом работает?
[17:56:47] <flylinkdc> и она точно ничего не ломает с картинками которые потом юзаются в винде?
[17:58:08] <flylinkdc> упс. а во флае нет вообще png формата смайлов - есть только bmp и gif
[19:07:18] <Nikoli> flylinkdc: под любым, если установить пакеты с этими бинарниками
[19:08:12] <Nikoli> уже давно использую - на поломки никто не жаловался, в том же quiterss сборки под винду давно именно так обработанные иконки используют
[19:08:38] <Nikoli> flylinkdc: а какой смысл gif использовать вместо png?
[19:09:06] <flylinkdc> gif - анимированные смайлы
[19:10:54] <Nikoli> так кроме смайлов и других иконок полно
[19:11:07] <Nikoli> они тоже не обработанные наверняка
[19:23:19] <loooser> dhamp_ : а это нормально что вызов чтения сокета вот в этой строке -
int left = (mode == MODE_DATA) ? ThrottleManager::getInstance()->read(sock.get(), &inbuf[0], (int)inbuf.size()) : sock->read(&inbuf[0], (int)inbuf.size());
- не отображается в стрейсе?...
[19:32:25] <loooser> или он в другом треде читается?
[19:36:47] <flylinkdc> а насколько размер картинок уменьшается в сумме в твоем случае?
[19:41:06] <Nikoli> flylinkdc: 1408257 -> 995286 bytes
[19:42:27] <Nikoli> flylinkdc: ну и через git diff --stat можно глянуть же
[19:42:56] <Nikoli> git diff --stat icons^..icons
[19:44:21] <Nikoli> некоторые иконки уменьшились даже в разы:
eiskaltdcpp-qt/qtscripts/tic-tac-toe/content/pics/board.png               | Bin 12172 -> 5062 bytes
[19:44:49] <Nikoli> точнее, команда git должна быть:
git diff --stat icons^^..icons
[19:47:07] mars1an вышел(а) из комнаты
[19:53:33] <loooser> flylinkdc: по-моему моё отжирание ЦПУ всё-таки связано с ограничением скорости, просто в эйскальте эта функция вызывается независимо от того, поставлена галочка или нет.
Глянь у себя эту ф-ю: ThrottleManager::getInstance()->read - может найдёшь чего...
[19:54:08] <loooser> Только я её не вижу в пошаговом выполнении через gdb :(
[19:58:15] <flylinkdc> looser - если лимитер зовется даже если нет галки то точно он виноват - лимитер  у дц кривой
[20:04:33] <flylinkdc> Nikoli хм. интересно - это получается столько лишнего говна было в них
[20:04:53] <flylinkdc> а для gif анимированных может знаешь тоже такую оптимизацию?
[20:06:24] <flylinkdc> и для bmp
[20:07:27] <flylinkdc> loooser спасибо - во флае код такой https://github.com/pavel-pimenov/flylinkdc-r5xx/blob/66ec75090ee1971f1bde802a39ac9caa6dab8e92/client/ThrottleManager.cpp#L55
[20:08:10] <flylinkdc> он кстати тоже плохой - если downLimit == 0 то всеравно зовется DownloadManager::getInstance()->getDownloadCount() - внутри лок лишний.
[20:09:38] <flylinkdc> у вас я вижу код
[20:09:39] <flylinkdc> int ThrottleManager::read(Socket* sock, void* buffer, size_t len)
{
    int64_t readSize = -1;
    size_t downs = DownloadManager::getInstance()->getDownloadCount();
    auto downLimit = getDownLimit(); // avoid even intra-function races
    if(!BOOLSETTING(THROTTLE_ENABLE) || !getCurThrottling() || downLimit == 0 || downs == 0)
        return sock->read(buffer, len);
[20:09:48] <flylinkdc> вроде как на галку смотрит
[20:11:33] <loooser> хз, в трейсе нет чтения сокета... Может он другим тредом читает его?
[20:11:46] <flylinkdc> а ты сам умеешь компилять ведь?
[20:12:07] <flylinkdc> добавь тут логирование return sock->read(buffer, len);
[20:12:18] <loooser> я умею применять патчи и говорить make :)
[20:12:29] <flylinkdc> но там в любом случае зовется
[20:12:30] <flylinkdc> sock->read
[20:12:39] <loooser> как логирование добавлять? :)
[20:13:37] <flylinkdc> проверь у себя в конфиге THROTTLEENABLE - там что стоит?
[20:16:53] <loooser>         <EnableThrottle type="int">1</EnableThrottle>
        <TimeDependentThrottle type="int">0</TimeDependentThrottle>
[20:17:25] <Nikoli> flylinkdc: exiftool на любые картинки можно применять
[20:17:25] <flylinkdc> dhamp_ посмотри код в void ThrottleManager::waitToken()
[20:17:35] <Nikoli> а вот замену optipng надо гуглить
[20:17:50] <flylinkdc> в чем прикол кода вида
[20:17:51] <flylinkdc>     if (curCS)
        Lock l(*curCS);
}
[20:18:07] <loooser> но я проверял с отключенной галочкой - тоже жрало. Разве что нужно было перезапустить...
[20:18:13] <flylinkdc> loooser - Почему у тебя стоит 1 ?
[20:18:27] <loooser> потому что галочка стоит :)
[20:19:37] <flylinkdc> т.е. галка не влияет на cpu
[20:19:44] <flylinkdc> тогда версий нет.
[20:20:10] <flylinkdc> но я бы в int ThrottleManager::read(Socket* sock, void* buffer, size_t len) заменил
[20:20:23] <loooser> ну давай исходить из версии, что влияет %)
[20:21:24] <flylinkdc>     if(!BOOLSETTING(THROTTLE_ENABLE) || !getCurThrottling() || downLimit == 0 || downs == 0)
на
    if(!BOOLSETTING(THROTTLE_ENABLE) || downLimit == 0 || downs == 0 || !getCurThrottling() )
хотя это не влияет на жор CPU
[21:14:59] <flylinkdc> ppa@ppa-dns:~/222222222222/EmoPacks/Flags$ exiftool -all= -overwrite_original $(find -iname '*.bmp')
Error: Writing of BMP files is not yet supported - ./flag_us.bmp
Error: Writing of BMP files is not yet supported - ./flag_es.bmp
[21:15:09] <flylinkdc> bmp не умеет
[21:15:40] <flylinkdc> а можешь на своей линуксе проверить - svn co https://flylinkdc.googlecode.com/svn/trunk/compiled/EmoPacks
[21:15:45] <flylinkdc> может у меня что-то не то стоит
[21:15:56] <flylinkdc> я сказал так sudo apt-get install libimage-exiftool-perl
[21:19:40] <flylinkdc> я счас пока попробую другие png файлы у себя почикать
[21:19:45] <flylinkdc> они есть у меня в виде ресурсов
[21:22:34] <flylinkdc> ppa@ppa-dns:~/222222222222/trunk/res/Splash$ exiftool -all= -overwrite_original $(find -iname '*.png')
    2 image files updated
    4 image files unchanged
ppa@ppa-dns:~/222222222222/trunk/res/Splash$
ppa@ppa-dns:~/222222222222/trunk/res$ exiftool -all= -overwrite_original $(find -iname '*.png')
   33 image files updated
    7 image files unchanged
[21:22:41] <flylinkdc> о эти почикало
[21:40:27] <loooser> хм, кажется нашёл проблему - вот здесь возвращается -1 без попытки чтения сокета:
int SSLSocket::read(void* aBuffer, int aBufLen) {
    if(!ssl) {
        return -1;
    }
[21:45:11] <flylinkdc> добавь туда плевок в лог и проверь свою версию
[21:51:52] <loooser> я не знаю как логи писать. Но в пошаговом выполнении в gdb именно этот кусок выполняется:
dcpp::SSLSocket::read (this=0xa35e4d8, aBuffer=0xad56e50, aBufLen=131072)
    at /home/kot/tmp/eiskaltdcpp-master-git/eiskaltdcpp/dcpp/SSLSocket.cpp:118
118        if(!ssl) {
(gdb)
119            return -1;
(gdb)
128    }
(gdb)
0xb66636fb in dcpp::BufferedSocket::threadRead (this=this@entry=0x9e79988)
    at /home/kot/tmp/eiskaltdcpp-master-git/eiskaltdcpp/dcpp/BufferedSocket.cpp:178
178        int left = (mode == MODE_DATA) ? ThrottleManager::getInstance()->read(sock.get(), &inbuf[0], (int)inbuf.size()) : sock->read(&inbuf[0], (int)inbuf.size());
(gdb)
179        if(left == -1) {
(gdb)
277    }
[22:11:04] pewpew вышел(а) из комнаты
[22:16:21] proxym вошёл(а) в комнату
[22:23:07] <flylinkdc> в логи писать так
[22:23:09] <flylinkdc> int SSLSocket::checkSSL(int ret) {
    if(!ssl) {
        LogManager::getInstance()->message(str(F_("SSLSocket::checkSSL - error !ssl")));
        return -1;
    }
[22:25:38] <flylinkdc> Nikoli - у меня вот какая экономия получилась https://yadi.sk/i/Rm3KrvqefdXak
[22:28:02] <Nikoli> flylinkdc: это exiftool + optinpng на всё?
[22:28:15] <loooser> и куда он напишет? В консоль?
[22:28:46] <flylinkdc> да - забрал к себе во флай https://code.google.com/p/flylinkdc/source/detail?r=18449
[22:29:01] <flylinkdc> нет он пишет в лог системного журанала
[22:29:09] <flylinkdc> включи его в настройках - жерналы
[22:29:23] <flylinkdc> файл будет зваться system.log
[22:32:40] GitHub_bot вошёл(а) в комнату
[22:32:40] <GitHub_bot> [eiskaltdcpp] @dhamp pushed 2 new commits to 2.3.x: https://github.com/eiskaltdcpp/eiskaltdcpp/compare/ff7cce782481...aaea1e61b35a
[22:32:41] <GitHub_bot> [eiskaltdcpp/2.3.x] Remove tags from images - Nikoli
[22:32:50] GitHub_bot вышел(а) из комнаты
[22:33:31] GitHub_bot вошёл(а) в комнату
[22:33:32] <GitHub_bot> [eiskaltdcpp] @dhamp merged 2.3.x into master: https://github.com/eiskaltdcpp/eiskaltdcpp/compare/d3934f8f499b...aaea1e61b35a
[22:33:41] GitHub_bot вышел(а) из комнаты
[22:34:03] <Nikoli> dhamp_ : а что вы за бота используете?
[22:34:43] GitHub_bot вошёл(а) в комнату
[22:34:43] GitHub_bot вошёл(а) в комнату
[22:34:43] <GitHub_bot> [eiskaltdcpp] @dhamp commented on issue #292: merged to master https://github.com/eiskaltdcpp/eiskaltdcpp/pull/292#issuecomment-87798952
[22:34:43] <GitHub_bot> [eiskaltdcpp] @dhamp closed pull request #292: Icons (master...icons) https://github.com/eiskaltdcpp/eiskaltdcpp/pull/292
[22:34:53] GitHub_bot вышел(а) из комнаты
[22:34:53] GitHub_bot вышел(а) из комнаты
[22:36:12] GitHub_bot вошёл(а) в комнату
[22:36:12] <GitHub_bot> [eiskaltdcpp] @dhamp commented on issue #292: https://github.com/eiskaltdcpp/eiskaltdcpp/commit/ff09956c7aaca230177d1835da5abc427ff230e7... https://github.com/eiskaltdcpp/eiskaltdcpp/pull/292#issuecomment-87799246
[22:36:22] GitHub_bot вышел(а) из комнаты
[22:40:57] dhamp_ вошёл(а) в комнату
[22:41:51] <dhamp_ > [22:34:03] <Nikoli> dhamp_ : а что вы за бота используете?
в настройках проекта, в сервисах есть такая штукаXMPP MUC, это она
[22:43:51] <Nikoli> т.е. встроенного в сам github, понял
[23:02:12] dhamp_ вышел(а) из комнаты
[23:05:05] proxym вошёл(а) в комнату
[23:06:41] proxym вышел(а) из комнаты: Logged out
[23:11:35] dhamp_ вошёл(а) в комнату
[23:11:45] dhamp_ вышел(а) из комнаты: Вышел из Vacuum-IM
[23:53:51] dhamp_ вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!