IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/03/04
~AreEnn
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest29533
HackerMan
Most2
Nausicaa
Ruskoye_911
Vort
`
acetone_
anon3
b3t4f4c3
fidoid
flumental
nemiga
not_bob_afk
plap
poriori
profetikla
segfault
soos
teeth
tensor
un
weko_
whothefuckami
orignal думаю пришло время пубоиковать новые коды
Sdash anyone online?
Sdash the thing is my qbittorrent client can successfully map port but i2pd can't
Sdash although in i2p.conf upnp is enabled
Sdash i2pd*.conf
Leopold You set custim port? >1024 ?
Sdash I can't make the network status to OK. It's always firewalled.
Sdash Leopold, which port should I choose?
Sdash I haven't chosen any port it's randomly choosed I assume
Leopold You are sure that port don't was redirect?
Sdash Leopold, what do you mean by redirect?
Vort Leopold: upnp is automatic if I remember correctly
Leopold Router show what port was not thrown away?
Vort Sdash: I suggest you to look into i2pd logs and search for UPnP messages there
Leopold maybe between you and network there is yet nat route devices?
Leopold $ traceroute gnu.org can show it
Vort Leopold: why it is fine for his torrent client then?
Sdash Vort, the log says UPnP: Unable to find valid Internet Gateway Device: error 2
Sdash Leopold, yes there's my router
Vort I don't know how it work, but I found that 2 = A valid IGD has been found but it reported as not connected
Leopold Ohh :( torrent work, i2pd upnp not work (
Vort "IGD in status 2 is also the IGD of the network but may not be connected due to various reasons (no external IP or external IP in a private IPv4/IPv6 block)"
Vort so it looks like UPnP reports that router have no external IP
Vort it is possible to hack code to accept status 2. but I'm not sure if it will make anything better
Vort it is possible to try writing there
Vort if (err == UPNP_IGD_VALID_CONNECTED || err == UPNP_IGD_VALID_NOT_CONNECTED)
Leopold <blngq> building i2pd with gcc8.4 on openbsd
Leopold <blngq> reccommended?
whothefuckami Есть смысл сейчас транк ставить, если у меня 2.46.1?
whothefuckami Может там что-то крутое сейчас добавили
orignal нет
orignal добавили DHT
orignal если у тебя флудфил будет проца меньше жрать
whothefuckami Пойду ставить
Vort эхх. похоже, функция reseed.floodfill давно поломана
Vort netdb.Start вызывается до transports.Start
orignal если он вообще работала
orignal jeff ее начинал делать не знаю доделал ли
Vort и поэтому в Transports::SendMessages получается доступ к нулевому указателю
Vort начал я сегодня смотреть утечки и наткнулся на особенность openssl
jeff orignal: it probably still works
jeff unless it doesnt
orignal Vort syas it doesn't
Vort null dereference happens
orignal чинить надо
Vort because transports is not ready when netdb is initialized
Vort начал я сегодня смотреть утечки и наткнулся на особенность openssl - оказывается, при статической линковке надо при завершении каждого потока вызывать OPENSSL_thread_stop();
Vort в принципе, можно просто натыкать в те потоки, где течёт
Vort теоретически, при динамической линковке эти функции повредить не должны
Vort ещё обнаружил, что в SSU2 два блока памяти по 1544 байт утекает. не вычислил пока ещё где конкретно
orignal так мы же потоки не завершаем кроме как в сэме
orignal про SSU2 это уже интересно
weko orignal: а джависты вообще живы? В чатах у них как то тихо, в приватные что ли перебрались?
orignal weko ты же знаешь ответ
orignal нет
orignal там тупо некому
weko [14:13:46] <orignal> там тупо некому
weko Вот это не знал
orignal так я же говорил
orignal там счас гланвый idk
orignal шах и мат
weko Я понимаю
weko Но про него я почти ничего не знаю
weko Тем более там вроде и других люди есть
weko Они же не пропадали разом
weko Вот и стало интересно почему ничего не пишут
orignal нет
orignal "другие люди" это был болгарин
orignal страд давно свалил
orignal а вот коды пора публиковть
jeff backtrace?
orignal Vort says that netdb tries to reseed before transports start
orignal as result null pointer
jeff do we have a way to tell transports "run this callable after start" ?
jeff if not can i add one?
orignal not sure
orignal just do it
orignal also I think we shouldn't hang netdb's tread
orignal but post this requests to transports tread
jeff i agree
orignal plus now I have a thread in router context
orignal hence reseed might be moved there
jeff got it
Vort "<~orignal> так мы же потоки не завершаем кроме как в сэме" они сами завершаются. и перед тем как завершатся окончательно надо туда подпихивать вызов. сейчас покажу пример
Vort вот перед этой строчкой можно подпихнуть вызов
Vort я пока три таких места нашёл. может, есть ещё
Vort void EphemeralKeysSupplier<Keys>::Run () это первое
Vort void Tunnels::Run () второе
Vort void HTTPServer::Run () третье
R4SAS только это такая себе "утечка"
Vort не будет мешать остальные утечки искать
R4SAS она проявится только при остановке ш2зв
R4SAS Hi2pd 20 0 1052980 56388 5156 S 0.0 5.7 0:06.17 `- i2pd
R4SAS уже 56 Мб
R4SAS 20 часов назад было 47
R4SAS объем транзита и скорость такая же
Vort я тоже вижу "толстую" кучу у себя. за 1 день + 8 часов аптайма куча разрослась до 142 340 K private
Vort но как будет дальше пока не знаю - я постоянно по ошибке прихлопываю процесс )
Vort хотелось бы чтобы выделенная память равнялась освобождённой на момент выхода из программы
Vort в таком случае остатки явно будут просто разжиревшими контейнерами. которых проще ловить (мне так кажется)
orignal так при выходе контейны тоже почистся
orignal у них деструкторы вызовутся
Vort это понятно. я о другому говорю
Vort о другом*
Vort что если один тип утечек полностью убрать, то можно уже о нём будет не думать
Vort orignal: можешь примерно сказать как пулы работают?
Vort в SSU2 утечка из-за пула
Vort но это может быть и моя ошибка где-то
Vort так что попытаюсь вначале понять, что происходит
Vort хех. хотя я похоже сам догадался
Vort AcquireMt - выделение, ReleaseMt - освобождение?
Vort в общем, понятно - два пакета передаются в boost, а дальше ничего (у меня узел с чистой netdb)
Vort то есть, вопрос в том, как заставить boost выплюнуть эти захваченные пакеты )
orignal ReleaseMt просто возврат
orignal без уцаление
Vort я уже понял
orignal удаление это ClealupMt
orignal чято значит "передаются в boost"?
Vort сейчас дам ссылку как комп отлагает
` Отрадно за многа-многа лет увидеть здесь заинтересованного человьека.
Vort вот сюда два пакета уходят
R4SAS так они в SSU2Server::HandleReceivedFrom уходят
orignal Vort это не уходит он просто ждет нового пакета
orignal как придет пакет то вызовется коллбэк
Vort ну так при выходе из программы пора бы перестать ждать
Vort а отдать пакет для удаления
Vort в моём случае HandleReceivedFrom не вызывается никогда. и при выходе два пакета утекают
Vort мелочь, а неприятно )
orignal да ты прав и при падении может падать
R4SAS "при падении падать"
R4SAS лол
orignal при заврешении
orignal поправлю как будет время
Vort ок
Vort может, из-за этого у меня с 95% шансом при выходе i2pd крешится?
Vort ну или ещё какой-то баг есть
Vort забавно, что у меня получилось сделать ресид со своего флудфила просто выкинув вот эту строчку: github.com/PurpleI2P/i2pd/blob/d50cf0ad83dfea3b00b27dc1789ff6032f985f3f/libi2pd/NetDb.cpp#L449
orignal при выходе много из-за чего может быть
Vort ок, понял. значит, надо будет ещё ловить
Vort а про ресид - флудфил то в netdb попал. а дальше уже i2pd без помощи NetDb::ReseedFromFloodfill справился
Vort полагаю, это не самый лучший вариант - для чего-то ведь функцию писали. но работает
Vort и сразу как до других узлов клиент добался - пошли ещё утечки :( ну логично
orignal я думаю все таки утечки где то в RouterInfo
Vort действительно нашёл одну из утечек в RouterInfo
orignal ну и где именно?
orignal я не вижу в чем тут утечка
Vort 544 байта - это размер IdentityEx. создаётся на строчке 164
Vort почему не удаляется - надо разбираться. но кажется мне, что как всегда дело в многопоточности
Vort пока пытался словить утечку RouterInfo попал на креш
Vort небось они связаны
Vort крешнулось при выходе когда я аккуратно поштучно следил за вызовом деструкторов RI:
Vort в общем, в m_Floodfills только root был целый, а zero и one - нули
Vort а тут приходит GetClosestFloodfill
Vort то есть, похоже, в netdb оставался один неуничтоженный RI
Vort хотя, m_Size = 0
Vort и m_RouterInfos { size=0 }
Vort похоже, я угадал
Vort вот тут идёт очистка из главного треда
Vort при живом треде-то. который завершаться будет чуть позже:
Vort orignal: может, вначале тред остановить, а потом его структуры данных чистить?
orignal так мы вроде так и делаем снчала join потом чистим
orignal ну так IdentiryEx это же разделяемый
orignal m_RouterIdentity = std::make_shared<IdentityEx>(m_Buffer->data (), m_BufferLen);
orignal возмодно ты прав если оно идет из разных тредов
orignal плохой код
Vort "так мы вроде так и делаем снчала join потом чистим" на строке 91 чистится, на строке 96 join идёт
Vort вообще, по поводу строк 88-91 сомнения
Vort если там нет блокировок (а их, скорее всего, нету), то это всё надо делать уже после завершения треда
Vort если ничего этому не мешает, конечно же
Vort "если оно идет из разных тредов" - остановка идёт из главного треда, ну а у netdb свой тред
Vort думаю, этот баг в какой-то мере блокирует дальнейшие разборки с утечками
Vort слишком много всего может идти не так, чтобы разбираться, есть ли там ещё дополнительно проблема
orignal я то думаю не про остановку а утечку в процессе работы
Vort в процессе работы утечка может идти двумя путями - 1. через разрастание контейнеров. 2. через потерю указателей
orignal да нужно чистить после join-а
Vort моя идея в том, чтобы полностью устранить возможность варианта #2
orignal вот 2 одно ты точно нашел
orignal у shared_ptr своп не атомарный
orignal вот в чем дело
Vort ну да. когда два потока дерутся за один объект - можно даже не разбираться что именно там сломается, надо эту ситуацию убирать
orignal вопрос как
orignal boost::shared_ptr бы не хотелось
Vort вот какие там взаимосвязи - этого я не знаю
Vort это сейчас речь о чём конкретно? об остановке netdb ?
orignal я предлагаю на 17-ый C++ перейти так мы все тянем поддержку CentOS 7 а там gcc 4.8
orignal об m_Identity в RouterInfo
orignal std::shared_ptr<const IdentityEx> m_RouterIdentity;
Vort в тем местом я ещё не разбирался
orignal если его реально меняет с разных тредов
Vort может там целыми RouterInfo течёт
orignal но этого быть не должно
orignal он должен 1 раз делаться
Vort точнее, скорее всего, целиком и течёт
orignal возможно
Vort я же это пытался выяснить, а вляпался в баг с остановкой
orignal поправить
orignal счачала join потом очистки
Vort там не только Identity тёк, там дохрена всего текло
orignal счас еще этот с SSU2 поправлю
Vort поэтому я предположил, что объект целиком утекал
Vort ок
Vort мне просто удобно было ловить утечку именно Identity так как там размер объекта удобный - в глаза бросается )
Vort так что не надо пока shared_ptr трогать. я его получше рассмотрю после исправления бага в остановкой
Vort ну и ловлю я сейчас баги старой Visual Studio, кооторая c++ 17 не потянет )
` Vort, есть возможность прогнать ш2зв код через какие-то "тэсты" кода?
Vort `: ну так я за последнюю неделю через три статических анализатора и прогнал )
` на хабре много лет какой-то тест c++ кода пЕарится, но там вроде платно
Vort `: вот до поиска пиратки PVS я ещё не дошёл
` дадада, PVS
Vort и так хватает что чинить без него
Vort orignal: заметил опечатки в коммите "recognize congestion caps". проверь, пожалуйста. там и COGNESTION (константа) и congesion (коммент)
orignal попавлю
orignal да дохуя опечаток
orignal сделал
Vort не до конца
Vort CONGESION
Vort T потерялась
R4SAS а я сидел днем и думал чего это за когнестия
Vort я даже со словарём сверялся en.wiktionary.org/wiki/congestion
Vort потому что буквы и у меня умеют в голове путаться )
` кокой виктионари7, толька кэмбриджд
orignal а ну лажно в след коммите
` Vort, во, другое дело.
orignal R4SAS это новые коды
R4SAS да я видал
orignal на дня сделую публикацию
orignal если мы не принимаем тоннели то публикуем E
Vort мне только непонятно как этот механизм будет работать в условиях медленного расползания RI по сети
Vort они же, вроде сутками могут идти? или нет?
Vort чтобы не вышло так, что пока RI с флагом дойдёт, ситуация уже 10 раз поменяется
orignal флудфилы быстрее
orignal потому там 15 минут