From da79a6c8ed0b9ea5bcb3f344df6419c9bdb87e5b Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 2 Nov 2006 14:09:02 +0100 Subject: [PATCH] plug memleak in case of failed files. --- lily/lily-parser-scheme.cc | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lily/lily-parser-scheme.cc b/lily/lily-parser-scheme.cc index 90d9a60366..3092c6ca9d 100644 --- a/lily/lily-parser-scheme.cc +++ b/lily/lily-parser-scheme.cc @@ -110,11 +110,12 @@ LY_DEFINE (ly_parse_file, "ly:parse-file", exit (2); } + + bool error = false; if ((file_name != "-") && file_name.empty ()) { warning (_f ("can't find file: `%s'", file)); - scm_throw (ly_symbol2scm ("ly-file-failed"), - scm_list_1 (scm_makfrom0str (file_name.c_str ()))); + error = true; } else { @@ -129,14 +130,19 @@ LY_DEFINE (ly_parse_file, "ly:parse-file", parser->parse_file (init, file_name, out_file); - bool error = parser->error_level_; + error = parser->error_level_; parser->unprotect (); - if (error) - /* TODO: pass renamed input file too. */ - scm_throw (ly_symbol2scm ("ly-file-failed"), - scm_list_1 (scm_makfrom0str (file_name.c_str ()))); } + + /* + outside the if-else to ensure cleanup fo Sources object, + */ + if (error) + /* TODO: pass renamed input file too. */ + scm_throw (ly_symbol2scm ("ly-file-failed"), + scm_list_1 (scm_makfrom0str (file_name.c_str ()))); + return SCM_UNSPECIFIED; } -- 2.39.5