Size: a a a

2020 February 20

VO

Vyacheslav Olkhovchenkov in freebsd_ru
т.е. всё, ловим пиздец с утечкой памяти?
источник

LS

Lev Serebryakov in freebsd_ru
Технические вопросы когда в точности и как инкрементируется эпоха — в исходники
источник

AE

Andrey Elsukov in freebsd_ru
там без бутылки не разобраться)
источник

VO

Vyacheslav Olkhovchenkov in freebsd_ru
ну когда убивать -- либо на логике либо на refcnt как сайчас у inpcb
источник

AF

Alexander Fedorov in freebsd_ru
Так как я разумею, эта сраная epoch(9) для того и создана, чтобы удалять уже после того как все нити не обращаются к объекту
источник

AE

Andrey Elsukov in freebsd_ru
угу
источник

AF

Alexander Fedorov in freebsd_ru
Изменять, опять придётся тот же WLOCK() делать
источник

AE

Andrey Elsukov in freebsd_ru
код пишется так, что пока ты внутри epoch секции работаешь с данными, считаешь что они не будут освобождены
источник

VO

Vyacheslav Olkhovchenkov in freebsd_ru
да похуй когда. ведь пока последний из той эпохи что у нас скажем inpcb аллоцировался не освободил его -- нельзя удалять ничего взятое дальше.
источник

AF

Alexander Fedorov in freebsd_ru
А вот читать, можно использовать например CK_QUEUE и не нужен RLOCK
источник

AE

Andrey Elsukov in freebsd_ru
модификацию данных ты должен уже сам контролировать сторонними локами
источник

LS

Lev Serebryakov in freebsd_ru
Alexander Fedorov
Так как я разумею, эта сраная epoch(9) для того и создана, чтобы удалять уже после того как все нити не обращаются к объекту
Именно. Когда все exit'нули эпоху X и она стала X+1
источник

VO

Vyacheslav Olkhovchenkov in freebsd_ru
а теперь смотри. заводится tcp коннект на пару суток. пошла эпоха. п потом два миллиарда короткоживущих коннектов. привет, пиздец-памяти
источник

AE

Andrey Elsukov in freebsd_ru
это не связано никак
источник

LS

Lev Serebryakov in freebsd_ru
Vyacheslav Olkhovchenkov
а теперь смотри. заводится tcp коннект на пару суток. пошла эпоха. п потом два миллиарда короткоживущих коннектов. привет, пиздец-памяти
Да нет же. Прошла пара суток — но живой коннект никто в очередь к удалению перекладывать не будет, он живой
источник

LS

Lev Serebryakov in freebsd_ru
Эпоха — это не когда аллоцирован
источник

AE

Andrey Elsukov in freebsd_ru
смысл в том, что в многоядерном окружении, когда множество потоков работают с данными, у тебя есть гарантия, что память не будет освобождена, пока с ней кто-то работает
источник

LS

Lev Serebryakov in freebsd_ru
Эпоха это когда положили в список к удалению потому что уже не нужно.
источник

LS

Lev Serebryakov in freebsd_ru
А пока коннект нужен — он живой.
источник

VO

Vyacheslav Olkhovchenkov in freebsd_ru
ну тогда ты никак не решашь вот эту задачу "Но встаёт вопрос — вот ты mbuf оттуда удалил, а когда его убивать? Вдруг пока ты его удалял его кто0то взял (указатель на него) в локальную переменную и пямощас работает?"
источник