Evgenii
ну это немного...
почти половина
Berkus
почти половина
шутишь чтоле
Berkus
std::size_t can store the maximum size of a theoretically possible object of any type (including array). A type whose size cannot be represented by std::size_t is ill-formed (since C++14) On many platforms (an exception is systems with segmented addressing) std::size_t can safely store the value of any non-member pointer, in which case it is synonymous with std::uintptr_t.
Berkus
Граждане из буста пересмотрели монти пайтона одновременно с бенни хиллом: ./boost/archive/detail/iserializer.hpp:69:7: error: macro expansion producing 'defined' has undefined behavior [-Werror,-Wexpansion-to-defined] #if ! DONT_USE_HAS_NEW_OPERATOR ^
Billy
Нашел я лики в R3, но не все. Там один странный и раутинг не аффкетит, только создание дерева. Хотя я сомневаюсь, что они вмержат мой ПР
Billy
Я тут посторил аналитику по хосту, прям видно как трафик через leak path растет, и растет Rss
🦥Alex Fails
фиксь, и го в procxx захерачим говно
🦥Alex Fails
а ты будешь мейнтейнить его)
Billy
Billy
так я убрал r3 из сервиса. проверим завтра. Сделал PR^ но там тухло все. я хз когда он вмержит его )
Berkus
юхуу
Billy
На втором графики срывы это или деплои или оом киллер
Billy
5 дней и 2 бессоных ночи. Все как всегда :-)
Matwey
У меня как-то было две недели бисекта gcc.
ttldtor
я несколько минут пытался проверить, не задал ли ты его белым текстом на белом фоне
Evgenii
плакать?)
Крылатый
Ты до throw 42; не дойдёшь ведь тогда.
Evgenii
а исключения в деструкторе это нормально?
Крылатый
А, теперь вижу.
Billy
Так а по первому исключению не закрывай файл например.
Крылатый
Если у тебя при flush исключение, то ничто тебе не поможет, ИМХО.
Крылатый
Не делать flush в деструкторе.
Крылатый
А делать явно.
Billy
Файл в деструкторе закрывается?
Крылатый
Ловить во флаше исключение на невозможность записи?
Крылатый
И можно обрабатывать в блоке catch.
Александр
Сделать flush(bool dont_throw = false) и из деструктора вызывать flush(true)
Крылатый
Сделать flush(bool dont_throw = false) и из деструктора вызывать flush(true)
Как вариант. Правда, тогда мы укрываем все ошибки.
Крылатый
Как вариант. Правда, тогда мы укрываем все ошибки.
// с этого боли не меньше, ИМХО, кучу раз попадал
Александр
Другой вариант: проверять наличие уже брошенных исключений. А там кидать исключение повторно вкупе с ошибкой записи, если произошла
Александр
Костыльненько
Крылатый
Ну так просто и обрабатывай — обмаж try-catch и обрабатывай по типу иключения, и только на no memory не делать flush.
Крылатый
Или при отсутствии доступа, хм.
Крылатый
Уже слишком много вариантов)
Evgenii
что читал на эту тему
Крылатый
Ну так на него и неделать flush.
Крылатый
не делать*
Evgenii
http://en.cppreference.com/w/cpp/language/function-try-block
🦥Alex Fails
Rethrow_exception
Александр
В деструкторе проверяем, находимся ли мы сейчас в раскрутке стека. std::current_exception() вроде бы. Если есть, сохраняем исключение, пытаемся сделать flush. Если вылетает ещё одно исключение, комбинируем его с прошлым и кидаем уже комбинированное.
Anatoly
не выбрасывать исключение из деструктора
Evgenii
да
Anatoly
кейс такой: первичное исключение показываем пользователю, а то что в деструкторе не выпускаем, поскольку оно уже вторично
Anatoly
поскольку первично throw 42
Evgenii
ну ты хочешь невозможного, поэтому придется выбирать из двух зол🤷‍♂
Evgenii
ну я не вижу способа это пофиксить
Anatoly
при раскрутке стека, при желании, ты можешь собрать все выброшенные исключения, имея некий регистратор, который будет отвечать за сбор std::exception_ptr в деструкторах
Anatoly
а дальше спрашивай у него и выводи все наведенные проблемы пользователю
Evgenii
unsafe rust?
Evgenii
а точн
Evgenii
а фортран?
Александр
Эта тема похожа на "а что делать, если у нас кончилась память и создание bad_alloc само бросит ещё что-то"
Александр
Да и вообще, в деструкторах и строки иногда создаются, что тоже ведёт к подобной ситуации
Александр
Я вполне согласен с ситуацией, просто намекаю, что обычно всем пофиг и забивают на первое исключение
Evgenii
можно ж увеличить стек🙄
Evgenii
ну или переписать на хвостовую
Anatoly
ну, это как раз нормально. получат масштабируемое решение, не зависящее от стека отведенного под поток выполнения.
🦥Alex Fails
можно не глобальной
Anatoly
можно не глобальной
thread_local std::vector<std::exception_ptr> errors; тредлокальный?
🦥Alex Fails
Типа class file : public exception_notifier { ~file() { try { flush(); catch (...) { notify_huita(std::current_exceptuon()); }; void fn(exception_huita &h) { file f("filota.txt"); h.add_exception_huita(f); }
Anatoly
Можно и так, думаю
во всяком случае без гонок можно запись вести
Anatoly
@zamazan4ik ты прав Саша, в том, что исключения С++ прямой потомок кодов возврата и не допускает сбора множественных выбросов, которые могут быть просто сайд эффектом первичного.
Anatoly
если пересмотреть поведение в случае повторного выброса во время раскрутки, расширив стандарт абстракцией регистратора вторичных исключений, то почему нет?
🦥Alex Fails
Надо стектрейс пилитт
🦥Alex Fails
И пнуть того мудака, которвй обещал помочь с пропосалом
🦥Alex Fails
/me пинает себя
FailsBot
Alex Ф-ф-фэils!🌠︙ пинает себя
void *
Ыыы
Anatoly
Ыыы
женщинам и детям лучше на это не смотреть
🦥Alex Fails
https://t.me/AlexFailsChannel/323 можно как-то так заимплементить
Evgenii
https://t.me/AlexFailsChannel/323 можно как-то так заимплементить
наконец-то можно укусить себя за локоть
🦥Alex Fails
Блин, сорь, чот оффтоп. Го сюда: @fludpac