На прошлой неделе произошел вопиющий случай – начала течь память в новой версии одной из моих C++ных программ. Поскольку таких вещей уже очень давно не было, яростно бросился искать причину.
Оказалось, что виной был баг в OTL, который проявлялся при стечении следующих обстоятельств:
- использовался механизм пулинга otl_stream-ов (#define OTL_STREAM_POOLING_ON);
- otl_stream открывался не через передачу аргументов в конструктор, а через вызов метода open().
Если затем для такого otl_stream-а вызова метода close() не было (закрытие посредством деструктора) или же явно вызывался метод close(true) (т.е. с указанием сохранить поток в пуле), то память начинала течь.
Детали найденной проблемы были отосланы Сергею Кучину, разработчику OTL, который уже выпустил версию OTL 4.0.260, в которой данная проблема исправлена.
Комментариев нет:
Отправить комментарий