Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
287 - Telegram Web
Telegram Web
Кстати, про рассветы 🌅
🔥243
Есть в libc такая функция dl_iterate_phdr. Она позволяет проитерироваться по всем загруженным so-шкам и на каждой выполнить колбэк, который ей передается в качестве параметра. Удобная, классная штука!

А вот как вы думаете, что будет, если из таких вот колбэков позвать dlopen: функцию, которая загружает новые so-шки. Т.е. в момент итерации по коллекции сошек добавить туда новые элементы? Понятно, что идея звучит не блестяще, но все-таки: что именно случится? Сегфолт? UB? Зависнет? Какое-нибудь красивое поведение, типа "вернуть на очередной итерации специальное значение, которое обозначает, что коллекция изменилась"? (ага, щас прям, размечтался, ты не в Java)

Вполне допускаю, что может и сегфолтнуться, но вчера отлаживал прекрасный дедлок, который был вызван вот таким кодом. Прекрасно в нем то, дедлокнулся такой код со случайным тредом-доходягой.

Вот представьте, живет и работает себе тред №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
Окей, гугл, как правильно бить грушу.
🤯9🔥3🌚2🎄1
Одна из самых безумных мыслей, которая время от времени приходит мне в голову, звучит, как: "нужно сделать третий семестр курса по алгоритмам".
🔥13🌚3🤔21💯1
И не говори, дорогая, денёк интересный.
12
Под конец семестра мой стол становится похож на склад магазина книг по computer science. И это еще даже не половина 📚
🔥30🤩7🤮1💋1🖕1
🫡
🔥17🫡11😭4😁3😢2
Завтра наш внутрикомандный хакатон, а значит осталась всего одна ночь, чтобы придумать проект!

Все-таки появилась у меня одна идея для шалости, надо немного только обмозговать за ночь 😏
🔥17
Неужели кто-то покупает такие кружки, находясь в Новосибирске? 🤔
😁26🤔3
ну, я попрограммировал
🎉22😁21🌚4
вот какой мне нужен цветок!

(а то кактус все-таки сдох, хотя я до последнего думал, что он просто устал)
🕊14😁6😭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
Это я сегодня после 11 часов сна без сновидений.

Вообще, вот что я понял: можно либо мало спать, либо мало есть, но не одновременно. После голодного дня без сна (и при этом с физической нагрузкой), тело просто моментально коллапсирует.
🤓5
Цыганский джаз – это да.
😁25👍2
Обожаю смотреть на выражение лиц профессиональных музыкантов из оркестра, когда они играют песни Кино или КиШа на всяких экспериментальных концертах.

Желаю всем так кайфовать от своей работы, как первая скрипка во время исполнения "Восьмиклассницы", например, вот здесь: https://youtu.be/yZdwektNTX0?t=6201

(ну и весь концерт абсолютно потрясающий, конечно)
👍9
Если я не в состоянии сделать слайды на пятнадцатиминутный толк за ночь до него, то что я за спикер такой?

отмазка, чтобы не садиться делать слайды, номер 428
🕊5😎4👍1😨1
Ох и попозорюсь я завтра на Филькиной премии, среди настоящих математиков)

Но будете рядом с универом, заходите что ли посмотреть на это! У меня доклад в 17-15.

P.S. Слайды, конечно, успел, изи.
🔥25👾2
2025/07/09 03:00:38
Back to Top
HTML Embed Code: