[Fontconfig] FontConfig memory question

mathog mathog at caltech.edu
Sat Feb 15 02:02:15 CET 2014

It could be that most of these leaks are not in fontconfig but in pango. 
  The valgrind entries mostly get to fontconfig with a call passing 
through pango_font_map_load_fontset().  If pango induces fontconfig to 
allocate memory, but it never tells it to release it, then that would 
explain valgrind entries like this:

==2513== 2 bytes in 1 blocks are indirectly lost in loss record 165 of 
==2513==    at 0x402BE68: malloc (in 
==2513==    by 0x58A0C30: strdup (strdup.c:43)
==2513==    by 0x4FB1F39: FcValueSave (fcpat.c:95)
==2513==    by 0x4FB2E80: FcPatternObjectAddWithBinding (fcpat.c:608)
==2513==    by 0x4FB300E: FcPatternObjectAdd (fcpat.c:658)
==2513==    by 0x4FB3386: FcPatternObjectAddString (fcpat.c:777)
==2513==    by 0x4F29964: ??? (in 
==2513==    by 0x4F65D26: pango_font_map_load_fontset (in 
==2513==    by 0x4F62F58: ??? (in 
==2513==    by 0x4F63D5E: pango_itemize_with_base_dir (in 
==2513==    by 0x4F6BC85: ??? (in 
==2513==    by 0x4F6CE43: ??? (in 
==2513==    by 0x4F6D377: pango_layout_get_pixel_extents (in 
==2513==    by 0x44E455C: ??? (in 
==2513==    by 0x44DC3B3: gtk_cell_renderer_get_size (in 

I was wrong about text_reassemble.c not having any leaked memory through 
fontconfig 2.11.  It does leak a little, but in a fairly mysterious way, 
and not from the section of code that was listed in the first post in 
this thread.  Here is one of the valgrind records:

==2513== 160 bytes in 1 blocks are still reachable in loss record 40,358 
of 47,988
==2513==    at 0x402BE68: malloc (in 
==2513==    by 0x4FB623E: _FcStrSetAppend (fcstr.c:1201)
==2513==    by 0x4FB6AB4: FcStrSetAddFilename (fcstr.c:1260)
==2513==    by 0x4FA1A18: FcConfigAddCache (fccfg.c:358)
==2513==    by 0x4FA1AB2: FcConfigAddDirList (fccfg.c:382)
==2513==    by 0x4FA1D45: FcConfigBuildFonts (fccfg.c:412)
==2513==    by 0x4FABE8D: FcInitLoadOwnConfigAndFonts (fcinit.c:140)
==2513==    by 0x8385EDD: trinfo_init (text_reassemble.c:1502)
==2513==    by 0x83A53EA: 
char const*) (emf-inout.cpp:3426)
==2513==    by 0x8320A09: Inkscape::Extension::Input::open(char const*) 
==2513==    by 0x831E599: 
Inkscape::Extension::open(Inkscape::Extension::Extension*, char const*) 
==2513==    by 0x80F583C: sp_file_open(Glib::ustring const&, 
Inkscape::Extension::Extension*, bool, bool) (file.cpp:274)
==2513==    by 0x808778C: sp_main_gui(int, char const**) (main.cpp:1087)
==2513==    by 0x8086EAF: main (main.cpp:812)

The mystery is that trinfo_init does not call 
FcInitLoadOwnConfigAndFonts directly.  It calls ftinfo_init() which in 
turn calls FcInit(), and presumably somewhere down from there 
FcInitLoadOwnConfigAndFonts() is called.  Not sure why valgrind does not 
show these intervening functions.


David Mathog
mathog at caltech.edu
Manager, Sequence Analysis Facility, Biology Division, Caltech

More information about the Fontconfig mailing list