LINUX.ORG.RU

Говнокод 10-летней давности

 , , , ,


1

4

Ъ: https://github.com/apenwarr/wvstreams/blob/17085388a723081806b2325557ec9a4384...

!Ъ: // if this fails, this task overflowed its stack. Make it bigger!

И magic_number = 42.

Смех смехом, но этот код, похоже, с тех пор никто не шатал, а поломалось лишь недавно, так что замешаны внешние факторы. Ну и что мне с этим делать?

Ну и что мне с этим делать?

Make it bigger!

Dudraug ★★★★★ ()

10-летней давности

мда. а вам сколько лет маладой чилавег?

mos ★★☆☆☆ ()

Самый прикольный коммент такой:

// magic; do not touch

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 1)

А у кода есть какие-то алтернативы при исчерпании стека? Может ему надо пойти ещё дальше и затереть побольше левых данных? Или взмахнуть волшебной палочкой и увеличить стек, магически обновляя указатели самого стека и все, указывающие внутрь этого стека? Стек автоматически растёт только у главной нити, у всех остальных он должен быть «достаточно большим» даже для настоящих потоков (std::thread), а тут файберы.

Очевидный второй вариант: уменьшить потребление памяти у того таска.

xaizek ★★★★★ ()
Ответ на: комментарий от xaizek

Кстати, я правильно понимаю, что покуда все эти техники детекта выхода за пределы выделенной области памяти используют определённые метки, которые проверяются — есть ненулевая вероятность, что метка совпадёт и выход останется незамеченным?

bodqhrohro_promo ()
Ответ на: комментарий от bodqhrohro_promo

Так размер стека регулируется же, не? Пробовал через ulimit, чот не помогает.

Он там в конструкторе объекта передаётся.

есть ненулевая вероятность, что метка совпадёт и выход останется незамеченным?

Ага.

xaizek ★★★★★ ()

Помножь на два. Ну или на ноль.

anonymous ()
Ответ на: комментарий от xaizek

Он там в конструкторе объекта передаётся

Ясно, значит, придётся пересобирать.

Ага.

Ш Е Р Е Т О Е Р Е Т О Р Е Т О Е Т О Т О О

bodqhrohro_promo ()
Ответ на: комментарий от bodqhrohro_promo

Ну почему глупости? Если использовать кучу для аллокации стека для рекурсивных алгоритмов и не использовать стековые массивы динамической длины, то величина потребления стека перестаёт зависеть от входных данных, что позволяет контролируемо использовать стековую память.

dzidzitop ★★ ()
Ответ на: комментарий от peregrine

Линупсоедам лишь бы всё выкинуть и переписать. А потом жалуются, что каждые несколько лет завозят новые технологии и закапывают старые, зоопарк, поцтеринг и 1% на десктопе.

bodqhrohro_promo ()
Ответ на: комментарий от I-Love-Microsoft

Хз, я этот код особо не ковырял и делать этого сейчас не собираюсь.

bodqhrohro_promo ()

hobbit

слать багрепорты авторам NM

Для начала нужно подтвердить, что виновато оно. Даже если причину я угадал правильно — дело скорее где-то в дровах или в железе, а NM виноват лишь тем, что использует NDIS. Его же можно заставить юзать модемный интерфейс для проверки?

bodqhrohro_promo ()
Ответ на: комментарий от bodqhrohro_promo

И поделие сие меня отталкивает самой своей концепцией жирного демона, который не заточен под модемы, мало чего пишет о своих решениях и не особо гибок. Покуда есть скриптовый дозвон, смысла в нём особого нету в принципе.

bodqhrohro_promo ()
Ответ на: комментарий от bodqhrohro_promo

каждые несколько лет завозят новые технологии и закапывают старые

Эволюция, это хорошо, хотя и медленно.

зоопарк

Свобода выбора это замечательно.

поцтеринг

Местами необходим, хотя порой он упорот, как с багом, который рута фичей давал.

1% на десктопе

Просто изумительно.

peregrine ★★★★★ ()
Ответ на: комментарий от peregrine

Эволюция, это хорошо, хотя и медленно.

Так это не эволюция, это революции.

Свобода выбора это замечательно.

Сама по себе — да. Но в ущерб другим факторам это уже становится спорным.

Просто изумительно

Ну да, по сравнению со всякими бздями и гайками это вполне достойная конкуренция. Если рассматривать десктопный гнулинукс как продукт для узкой целевой аудитории, то проблемы с этим нет и вовсе. А то так можно и на майкрософт наехать, что у них до сих пор своей кучи нефтяных платформ нет.

bodqhrohro_promo ()

Стек, как правило, в двух случаях переполнен

1) глубокая рекурсия

2) баги или просто плохой код

Но в любом случае, если надо срочно, стек расширяется легко

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.