enable garbage collection for pdfpage and ft_face

pull/2/merge
HW 13 years ago
parent b38b75298a
commit 04772ea3ee

10
ft.c

@ -140,9 +140,12 @@ static int renderGlyph(lua_State *L) {
static int doneFace(lua_State *L) { static int doneFace(lua_State *L) {
FT_Face *face = (FT_Face*) luaL_checkudata(L, 1, "ft_face"); FT_Face *face = (FT_Face*) luaL_checkudata(L, 1, "ft_face");
FT_Error error = FT_Done_Face(*face); if(*face != NULL) {
if(error) { FT_Error error = FT_Done_Face(*face);
return luaL_error(L, "freetype error when freeing face"); if(error) {
return luaL_error(L, "freetype error when freeing face");
}
*face = NULL;
} }
return 0; return 0;
} }
@ -150,6 +153,7 @@ static int doneFace(lua_State *L) {
static const struct luaL_reg ft_face_meth[] = { static const struct luaL_reg ft_face_meth[] = {
{"renderGlyph", renderGlyph}, {"renderGlyph", renderGlyph},
{"done", doneFace}, {"done", doneFace},
{"__gc", doneFace},
{NULL, NULL} {NULL, NULL}
}; };

@ -231,9 +231,12 @@ static int closePage(lua_State *L) {
#endif #endif
//fz_free_glyph_cache(page->doc->glyphcache); //fz_free_glyph_cache(page->doc->glyphcache);
//page->doc->glyphcache = fz_new_glyph_cache(); //page->doc->glyphcache = fz_new_glyph_cache();
pdf_free_page(page->page); if(page->page != NULL) {
pdf_free_page(page->page);
pdf_age_store(page->doc->xref->store, 2); pdf_age_store(page->doc->xref->store, 2);
page->page = NULL;
}
} }
static int drawPage(lua_State *L) { static int drawPage(lua_State *L) {
@ -315,6 +318,7 @@ static const struct luaL_reg pdfpage_meth[] = {
{"getSize", getPageSize}, {"getSize", getPageSize},
{"getUsedBBox", getUsedBBox}, {"getUsedBBox", getUsedBBox},
{"close", closePage}, {"close", closePage},
{"__gc", closePage},
{"draw", drawPage}, {"draw", drawPage},
{NULL, NULL} {NULL, NULL}
}; };

Loading…
Cancel
Save