yajohn: (Default)
[personal profile] yajohn
Ковыряясь в старых исходниках нашего продукта натыкаешься порой на такие трупы в шкафу...

Приложение у нас не просто так, а многопоточное. Потому что серверное. Но так исторически сложилось, что некоторые функции работают с глобальными переменными. Из разных потоков, соответственно. Старые винды от такой наглости выдавали access violation, но "дядя Билл думает о нас" и под xp мелкое хулиганство сходит с рук. Что, впрочем, не означает что в процессе работы одной нити переменная не может быть изменена другой. Что в итоге? Результат работы функции мн... недетерминирован. Кто успел - того и Маша, а кто папа - вскрытие покажет.
И вот тут начинается самое интересное. Мой неизвестный предшественник изучив проблему нашел воистину гениальное решение: если функция выдает что-то совсем уж непотребное, то ее надо вызвать еще раз. И так в цикле десять раз, пока чтонибудь похожее на правильный результат не родится. Правильно, за это время другие потоки уже отработают и оставят многострадальную глобальную переменную в покое... Нетривиальный подход, однако, но ведь работает!

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

п.с. при одном клиенте поток один и все работает как часы. именно так мы и тестируем, да.
...

много букв про ИТ. Нормальным людям не интересно.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

yajohn: (Default)
yajohn

January 2026

M T W T F S S
   1234
567891011
1213 1415161718
19202122232425
262728293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 21/01/2026 07:53
Powered by Dreamwidth Studios