Не забывайте закрывать файлы

Временами занимаюсь написанием системы для сборки html/js/css... файлов из небольших шаблонов. Пишется она на Node.js и включает в себя, среди прочего, и небольшой стандартный http-сервер.

Сервер этот умеет отдавать не только уже скомпилированные и собранные файлы, но и компилировать все "налету", без генерации промежуточных файлов. При этом он каждый раз открывает нужные для компиляции файлы и, по идее, должен бы из закрывать сразу после этого. Но что-то на меня нашло и я закомментировал строку закрытия открытого файла в модуле1 azbnode/mdl/pagebuilderhtmlparser.js

//this.azbn.mdl('fs').close(file_handle);

Как итог: парсер открывает файл, все работает... Но как только мы обновляем страницу, отваливается половина функций, связанных с работой с файлами - сохранение, удаление и проч. Я очень долго не мог понять, что происходит. Стандартные системы логирования дают очень мало информации, почему на винде не хватает прав для открытия файла. Через 4 часа я выяснил, что причина в незакрытом дескрипторе файла. Глупейшая ошибка.

Что интересно, повторное открытие файла парсером ошибки не вызывало. Видимо, в данном случае модуль (или функция) работает в том потоке Node.js, в котором и нужно, а для других модулей он создает отдельные потоки (не специалист, могу только предполагать)

 

1 модуль не в стандартном понимании Node.js, а внутренний модуль моего фреймворка.