From f8d9dead205dc32ab5c8d25ba9eec5928bf2356e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 30 Oct 2012 16:09:45 +0530 Subject: [PATCH] Fix mem leak in sfntly --- src/calibre/utils/fonts/sfntly.cpp | 2 +- src/calibre/utils/fonts/subset.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/calibre/utils/fonts/sfntly.cpp b/src/calibre/utils/fonts/sfntly.cpp index f156611909..8f74bdddfa 100644 --- a/src/calibre/utils/fonts/sfntly.cpp +++ b/src/calibre/utils/fonts/sfntly.cpp @@ -497,7 +497,7 @@ do_subset(const char *data, Py_ssize_t sz, Ptr &predicate) { return NULL; } - font = fonts[0].Detach(); + font = fonts[0]; if (font->num_tables() == 0) { PyErr_SetString(Error, "Loaded font has 0 tables."); return NULL; diff --git a/src/calibre/utils/fonts/subset.py b/src/calibre/utils/fonts/subset.py index 51b64af6b2..cf4d66193a 100644 --- a/src/calibre/utils/fonts/subset.py +++ b/src/calibre/utils/fonts/subset.py @@ -76,6 +76,21 @@ def print_stats(old_stats, new_stats): '%10s'%nsz, ' ', '%5.1f %%'%np, suffix) prints('='*80) +def test_mem(): + load_sfntly() + from calibre.utils.mem import memory + import gc + gc.collect() + start_mem = memory() + raw = P('fonts/liberation/LiberationSerif-Regular.ttf', data=True) + calls = 1000 + for i in xrange(calls): + subset(raw, (), (('a', 'z'),)) + del raw + for i in xrange(3): gc.collect() + print ('Leaked memory per call:', (memory() - start_mem)/calls*1024, 'KB') + + def main(args): import sys, time from calibre import prints