Введение

Тип программной ошибки

Утечка дескрипторов – это тип программной ошибки, возникающий, когда компьютерная программа запрашивает дескриптор для ресурса, но не освобождает его, когда он больше не нужен. Если это происходит часто или неоднократно в течение длительного периода времени, большое количество дескрипторов может быть помечено как занятые и, следовательно, недоступны, что приводит к проблемам с производительностью или сбою. Термин происходит от "утечки памяти". Утечки дескрипторов, как и утечки памяти, являются конкретными случаями утечки ресурсов.

Причины

Одна из причин утечки дескриптора – это когда программист ошибочно полагает, что получение дескриптора для сущности – это просто получение неуправляемой ссылки, не понимая, что на самом деле выполняется подсчет ссылок, копирование или другая операция. Другая причина – плохие шаблоны проектирования обработки исключений, когда программисты не учитывают, что при возникновении исключения и преждевременном выходе из подпрограммы код очистки в конце процедуры может не выполниться. Например, это может произойти при получении дескриптора устройства отображения. Программисты могут использовать этот дескриптор для проверки каких-либо свойств (например, запроса поддерживаемых разрешений), а затем просто продолжить работу, не освобождая дескриптор. Если бы дескриптор был просто указателем на структуру данных без дополнительного управления, то выход дескриптора за пределы области видимости не вызвал бы проблем. Однако во многих случаях такие дескрипторы необходимо явно закрывать или освобождать, чтобы избежать утечки ресурсов, связанных с ними; точные требования к работе с дескриптором зависят от конкретного интерфейса.