~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?
Leopold
Yup)
nick-kramer-117
Да)
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 (
Sdash
yes
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
here github.com/PurpleI2P/i2pd/blob/d50cf0ad83dfea3b00b27dc1789ff6032f985f3f/daemon/UPnP.cpp#L115
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
pog
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
ok
jeff
backtrace?
orignal
Vort says that netdb tries to reseed before transports start
orignal
as result null pointer
jeff
ok
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
jeff
k
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
github.com/PurpleI2P/i2pd/blob/d50cf0ad83dfea3b00b27dc1789ff6032f985f3f/libi2pd/Transports.cpp#L85
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 - освобождение?
R4SAS
+
Vort
в общем, понятно - два пакета передаются в boost, а дальше ничего (у меня узел с чистой netdb)
Vort
то есть, вопрос в том, как заставить boost выплюнуть эти захваченные пакеты )
orignal
ReleaseMt просто возврат
orignal
без уцаление
Vort
я уже понял
orignal
удаление это ClealupMt
orignal
чято значит "передаются в boost"?
Vort
сейчас дам ссылку как комп отлагает
Vort
github.com/PurpleI2P/i2pd/blob/d50cf0ad83dfea3b00b27dc1789ff6032f985f3f/libi2pd/SSU2.cpp#L236-L237
`
Отрадно за многа-многа лет увидеть здесь заинтересованного человьека.
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
github.com/PurpleI2P/i2pd/blob/d50cf0ad83dfea3b00b27dc1789ff6032f985f3f/libi2pd/RouterInfo.cpp#L164
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
github.com/PurpleI2P/i2pd/blob/d50cf0ad83dfea3b00b27dc1789ff6032f985f3f/libi2pd/NetDb.cpp#L94-L98
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 минут