diff --git a/ft.c b/ft.c index 5bbae5841..952d2bb71 100644 --- a/ft.c +++ b/ft.c @@ -140,9 +140,12 @@ static int renderGlyph(lua_State *L) { static int doneFace(lua_State *L) { FT_Face *face = (FT_Face*) luaL_checkudata(L, 1, "ft_face"); - FT_Error error = FT_Done_Face(*face); - if(error) { - return luaL_error(L, "freetype error when freeing face"); + if(*face != NULL) { + FT_Error error = FT_Done_Face(*face); + if(error) { + return luaL_error(L, "freetype error when freeing face"); + } + *face = NULL; } return 0; } @@ -150,6 +153,7 @@ static int doneFace(lua_State *L) { static const struct luaL_reg ft_face_meth[] = { {"renderGlyph", renderGlyph}, {"done", doneFace}, + {"__gc", doneFace}, {NULL, NULL} }; diff --git a/pdf.c b/pdf.c index a4080b49d..df7002253 100644 --- a/pdf.c +++ b/pdf.c @@ -231,9 +231,12 @@ static int closePage(lua_State *L) { #endif //fz_free_glyph_cache(page->doc->glyphcache); //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) { @@ -315,6 +318,7 @@ static const struct luaL_reg pdfpage_meth[] = { {"getSize", getPageSize}, {"getUsedBBox", getUsedBBox}, {"close", closePage}, + {"__gc", closePage}, {"draw", drawPage}, {NULL, NULL} };