Утечка дескрипторов — это тип программной ошибки , которая возникает, когда компьютерная программа запрашивает дескриптор ресурса , но не освобождает дескриптор, когда он больше не используется. [1] Если это происходит часто или многократно в течение длительного периода времени, большое количество дескрипторов может быть помечено как используемые и, следовательно, недоступные, что приводит к проблемам с производительностью или сбою .
Термин происходит от memory leak . Утечки дескрипторов, как и утечки памяти, являются конкретными случаями утечек ресурсов .
Одной из причин утечки дескрипторов является то, что программист ошибочно полагает, что получение дескриптора сущности — это просто получение неуправляемой ссылки , не понимая, что на самом деле выполняется подсчет, копирование или другая операция. Другая причина — плохие шаблоны проектирования обработки исключений , когда программисты не учитывают, что при возникновении исключения и преждевременном выходе из подпрограммы код очистки в конце процедуры может не быть выполнен.
Примером этого может быть получение дескриптора для устройства отображения. Программисты могут использовать этот дескриптор для проверки некоторого свойства (например, запроса поддерживаемых разрешений), а затем просто продолжить работу, не отпуская дескриптор. Если дескриптор был просто указателем на некоторую структуру данных без дополнительного управления, то разрешение дескриптору выйти из области действия не вызовет проблемы. Однако во многих случаях такие дескрипторы должны быть явно закрыты или освобождены, чтобы избежать утечки ресурсов, связанных с ними; точные требования к тому, что должно быть сделано с дескриптором, зависят от интерфейса.