понедельник, 2 апреля 2012 г.

[prog.bugs] Помог диагностировать еще одну проблему в OTL

На прошлой неделе произошел вопиющий случай – начала течь память в новой версии одной из моих C++ных программ. Поскольку таких вещей уже очень давно не было, яростно бросился искать причину.

Оказалось, что виной был баг в OTL, который проявлялся при стечении следующих обстоятельств:

  • использовался механизм пулинга otl_stream-ов (#define OTL_STREAM_POOLING_ON);
  • otl_stream открывался не через передачу аргументов в конструктор, а через вызов метода open().

Если затем для такого otl_stream-а вызова метода close() не было (закрытие посредством деструктора) или же явно вызывался метод close(true) (т.е. с указанием сохранить поток в пуле), то память начинала течь.

Детали найденной проблемы были отосланы Сергею Кучину, разработчику OTL, который уже выпустил версию OTL 4.0.260, в которой данная проблема исправлена.

Комментариев нет: