Евгений Степанищев

Я — эксперт в области разработки веб-приложений и безопасности в интернете. Каждый месяц мой блог посещают около 90 тысяч человек. Работаю техническим директором в «Системах документооборота», занимаюсь электронным правительством.

Век живи, век учись, от нехватки памяти умрёшь

Наступил недавно на отличные питонячьи грабли. Хорошие такие, массивные, со специальными шипами на рукоятке.

Есть модуль, внутри него происходит fork — внутри потомка изолируется libmapi, у которой нещадно течёт память. Модуль используется внутри программы, которая перехватывает все exceptions (!). Знаю, что это неправильно, но она это делает в режиме отладки, для отладки и используется.

Загвоздка в том, что процесс-потомок выходил при помощи sys.exit. Если вы уже знаете в чём проблема, можете начинать хохотать. Я не знал и убил тестовую машину — кончилась память. Ваня Сагалаев тоже не знал.

sys.exit пораждает иключение и выходит с его помощью. Если где-то это исключение блокируется, то потомок, натурально, не может умереть. Решение простое — выходить надо по os._exit.
4 комментария
6 апреля 2009 19:25

Windows 7: repair screen

Ну, раз так, давайте я что-нибудь про Windows 7 расскажу, тем более повод есть: сегодня мой ноут вдруг резко вырубился, с ним такое бывает, а после включения «Винда» сказала, что загрузиться не может. После чего, немного почесала винтом и показала repair screen, там пару десятков минут что-то делала и запустилась. Один из экранов я сфоткал.

Repair screen (44.72КБ)

Кардинальное различие в том, что когда раньше Windows из NT-ветки (т. е. NT, 200x, XP, Vista) у меня падала, она, либо выводила диагностику («нет такого-то файла, ничего не поделаешь») и останавливалась, либо требовала установочного или восстановочного диска.

Видимо, сейчас (по крайней мере, если физически всё исправно и загрузочный сектор винта цел) ничего такого не надо. Ура.

P.S. Чтобы не гадали из-за чего вырубается у меня комп, я скажу сразу, так как причину знаю. Я случайно сломал USB-разъём (пластмастка выпала), но иногда, по привычке, туда что-то включаю, устройство работает, но иногда коротит питанием на корпус, у компа срабатывает защита.

Мне интересно, что бы мне потребовалось сделать, если бы у меня сломался (единственный) USB-порт на Mac Air? Тут я просто забил — у меня ещё четыре исправных есть, а там?