Есть библиотека Cairo 0.1.22. Есть libgdiplus (из проекта Mono). При сборке libgdiplus'а лезут ошибки насчет неверных типов аргументов при вызове Cairo'шной функции cairo_set_pattern. Лезу в соответствующие файлы - и впрямь, вместо cairo_pattern_t применяется cairo_surface_t. Судя по всему, в Cairo есть функция получения pattern'а по surface'у. Так что я везде где надо в libgdiplus делаю создание переменной нужного типа (cairo_pattern_t*) и передаю в функцию cairo_set_pattern уже ее.
Вот тут возникает вопрос. Вроде в Cairo используется подсчет использований структур типа pattern и surface, т.е. когда он доходит до нуля, соотв. экземпляр структуры убивается. Надо ли после передачи cairo_pattern_t* в функцию делать cairo_pattern_destroy или нет? В одном месте в libgdiplus, где была попытка передать cairo_surface_t* после передачи как раз стоял cairo_surface_destroy. В других местах этого не было, но особо подробно я код не анализировал, наверняка сказать не могу.
Не возникнет ли у меня либо утечек памяти, либо, наоборот, сбоев, при использовании такой "пропатченой" libgdiplus?