cairo_debug_reset_static_data () проблема с использованием библиотеки pango

У меня проблема с функцией cairo_debug_reset_static_data (), когда я комбинирую pango lib и cairo, поскольку при ее вызове я получаю следующее утверждение.

draw: cairo-hash.c: 217: _cairo_hash_table_destroy: Утверждение `hash_table-> live_entries == 0 'не выполнено.

Вот код, который я взял из следующего сообщения: где некоторые у одного была аналогичная проблема, но они не поделились там каким-либо рабочим решением (я уже пробовал решение из сообщения, но оно не сработало). Если мы удалим закомментированные строки, то будет утверждение.

#include <cairo.h>
#include <pango/pangocairo.h>

int
main (int argc, char *argv[])
{
    cairo_surface_t *surface;
    cairo_t *context;

    surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 120, 120);
    context = cairo_create(surface);

    PangoRectangle extents;
    PangoLayout *layout;
    PangoFontDescription *desc;

    layout = pango_cairo_create_layout (context);

    desc = pango_font_description_from_string("Inconsolata 12");
    pango_layout_set_font_description(layout, desc);
    pango_font_description_free(desc);

    pango_layout_set_markup(layout, "hello", -1);
    //pango_layout_get_pixel_extents(layout, &extents, NULL);

    //pango_cairo_show_layout(context, layout);

    g_object_unref(layout);
    cairo_destroy(context);
    cairo_surface_destroy(surface);

    cairo_debug_reset_static_data();

    return(0);
}

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

Спасибо


person Dinesh Kumar Govinda    schedule 13.11.2019    source источник


Ответы (1)


Вот код, который я взял из следующего сообщения: где некоторые у одного была аналогичная проблема, но они не поделились каким-либо рабочим решением.

Хорошо, вы видели ответ на это сообщение? Он содержит все, что вам нужно знать, чтобы исправить этот сбой утверждения:

Добавьте вызов pango_cairo_font_map_set_default(NULL); перед вызовом cairo_debug_reset_static_data();. Это заставляет PangoCairo не ссылаться на шрифты, которые у него все еще живы.

person Uli Schlachter    schedule 15.11.2019
comment
Спасибо за ответ. Я сделал это в соответствии с комментариями, прежде чем размещать здесь, но это не помогло. - person Dinesh Kumar Govinda; 18.11.2019
comment
Для ясности: вы пробовали это решение, и оно вам не подходит? Для меня и вашего примера здесь это определенно работает ... - person Uli Schlachter; 18.11.2019
comment
Понятно. Да, у меня это не сработало. Не могли бы вы рассказать, как вы это тестировали? Например, ОС, IDE, компилятор и т. Д., А также версия valgrind, флаги и т. Д.,. Я постараюсь повторить попытку, как и ты. - person Dinesh Kumar Govinda; 19.11.2019
comment
Текущее тестирование Debian на amd64. Я только что скомпилировал ваш пример (с добавлением двух закомментированных строк) с gcc test.c $(pkg-config --cflags --libs pangocairo). Эта программа умирает с ошибкой утверждения при запуске. Затем я добавил вызов pango_cairo_font_map_set_default(NULL); прямо перед вызовом cairo_debug_reset_static_data(). При повторной компиляции и запуске программы она просто завершается нормально. - person Uli Schlachter; 19.11.2019
comment
Для меня и IDE не используется valgrind ... ну, я использую gVim в качестве текстового редактора. - person Uli Schlachter; 19.11.2019
comment
Хорошо, спасибо за подробности. Я еще раз протестирую и посмотрю. - person Dinesh Kumar Govinda; 22.11.2019