Ручка утечки - Handle leak

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

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

Причины

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

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