Есть в
А вот как вы думаете, что будет, если из таких вот колбэков позватьага, щас прям, размечтался, ты не в Java)
Вполне допускаю, что может и сегфолтнуться, но вчера отлаживал прекрасный дедлок, который был вызван вот таким кодом. Прекрасно в нем то, дедлокнулся такой код со случайным тредом-доходягой.
Вот представьте, живет и работает себе тред №1, никак с вашим кодом не связанный. В какой-то момент решает помереть, позвав
А в этот момент тред №2 такой классный шарится по всем сошкам через
Понятно, что пример можно было бы намного проще написать: любой другой тред, который пойдет звать
Да, кстати, в мане для
—
Смешно, что раньше в нашей кодовой базе на вызове dl_iterate_phdr висела кое-что подсказывающая компилятору пометка
#дух_машины
libc
такая функция dl_iterate_phdr. Она позволяет проитерироваться по всем загруженным so-шкам и на каждой выполнить колбэк, который ей передается в качестве параметра. Удобная, классная штука! А вот как вы думаете, что будет, если из таких вот колбэков позвать
dlopen
: функцию, которая загружает новые so-шки. Т.е. в момент итерации по коллекции сошек добавить туда новые элементы? Понятно, что идея звучит не блестяще, но все-таки: что именно случится? Сегфолт? UB? Зависнет? Какое-нибудь красивое поведение, типа "вернуть на очередной итерации специальное значение, которое обозначает, что коллекция изменилась"? (Вполне допускаю, что может и сегфолтнуться, но вчера отлаживал прекрасный дедлок, который был вызван вот таким кодом. Прекрасно в нем то, дедлокнулся такой код со случайным тредом-доходягой.
Вот представьте, живет и работает себе тред №1, никак с вашим кодом не связанный. В какой-то момент решает помереть, позвав
pthread_exit
. Но вот pthread_exit
во время своей работы может попытаться подгрузить библиотечку libgcc_s.so
(нашел время!), конечно же через dlopen
=> dlopen
в свою очередь первым делом захватит лок на загрузку: dl_load_lock
=> а потом, если мы реально смогли загрузить библиотеку, попытаемся добавить результат в список загруженных сошек, мы возьмем еще один лок: dl_load_write_lock
.А в этот момент тред №2 такой классный шарится по всем сошкам через
dl_iterate_phdr
и зовет для каждого из них ваш кастомный колбэк. Конечно же, чтобы пробегать по списку он сначала берет dl_load_write_lock
, иначе вдруг список поменяется? А наш кастомный колбэк зовет dlopen
, который, как мы уже знаем, первым делом возьмет dl_load_lock
. Дедлок!Понятно, что пример можно было бы намного проще написать: любой другой тред, который пойдет звать
dlopen
– наш конкурент. Но от бедных тредов-доходяг я такого не ожидал. А случалось все это на терминации рантайма, где как раз все и умирают (очень интересное состояние рантайма). Да, кстати, в мане для
dl_iterate_phdr
никто не пишет, что из колбэков не стоит звать dlopen
. Но так ведь и над каждой розеткой не пишут, что не стоит в нее пальцы совать. —
Смешно, что раньше в нашей кодовой базе на вызове dl_iterate_phdr висела кое-что подсказывающая компилятору пометка
@Quick
. Потом ее убрали, и проблема начала проявляться. Вопрос веры, получается: пока верили, что вызов быстрый, он и заканчивался быстро, без всяких дедлоков. Стоило усомниться, и вот мы здесь.#дух_машины
👍13👾8🙈3
Одна из самых безумных мыслей, которая время от времени приходит мне в голову, звучит, как: "нужно сделать третий семестр курса по алгоритмам".
🔥13🌚3🤔2❤1💯1
Завтра наш внутрикомандный хакатон, а значит осталась всего одна ночь, чтобы придумать проект!
Все-таки появилась у меня одна идея для шалости, надо немного только обмозговать за ночь 😏
Все-таки появилась у меня одна идея для шалости, надо немного только обмозговать за ночь 😏
🔥17
Telegram
Слава рисует не только мемы
😭19🤝10💔5🤷♀2
Лучше мне, конечно, GC Handbook вообще не открывать. Я как начинаю что-нибудь там перечитывать, так бац! И уже утро, а я еще не ложился.
(ну ладно, это была хорошая ночь)
(ну ладно, это была хорошая ночь)
❤14
This media is not supported in your browser
VIEW IN TELEGRAM
Я, конечно, не руководитель, но как же я сегодня это чувствую.
🔥21😭8🤓4
деканат, глядя на мои 1-to-1 со студентами:
о, миллениалы изобретают часы приема
о, миллениалы изобретают часы приема
🔥24😁17🤣7👍2
Обожаю смотреть на выражение лиц профессиональных музыкантов из оркестра, когда они играют песни Кино или КиШа на всяких экспериментальных концертах.
Желаю всем так кайфовать от своей работы, как первая скрипка во время исполнения "Восьмиклассницы", например, вот здесь: https://youtu.be/yZdwektNTX0?t=6201
(ну и весь концерт абсолютно потрясающий, конечно)
Желаю всем так кайфовать от своей работы, как первая скрипка во время исполнения "Восьмиклассницы", например, вот здесь: https://youtu.be/yZdwektNTX0?t=6201
(ну и весь концерт абсолютно потрясающий, конечно)
YouTube
Юрий Каспарян / Симфоническое КИНО (11.12.23, ММДМ)
00:00 – Интро
01:37 – Группа крови
06:09 – Закрой за мной дверь, я ухожу
09:07 – Электричка
14:06 – Каждую ночь
17:31 – В наших глазах
21:25 – Война
25:44 – Пачка сигарет
31:18 – Дальше действовать будем мы
35:07 – Прохожий
38:05 – Красно-желтые дни
43:58…
01:37 – Группа крови
06:09 – Закрой за мной дверь, я ухожу
09:07 – Электричка
14:06 – Каждую ночь
17:31 – В наших глазах
21:25 – Война
25:44 – Пачка сигарет
31:18 – Дальше действовать будем мы
35:07 – Прохожий
38:05 – Красно-желтые дни
43:58…
👍9
Если я не в состоянии сделать слайды на пятнадцатиминутный толк за ночь до него, то что я за спикер такой?
отмазка, чтобы не садиться делать слайды, номер 428
отмазка, чтобы не садиться делать слайды, номер 428
🕊5😎4👍1😨1