diff --git a/400_xowa/src/gplx/xowa/apps/servers/http/Http_server_mgr.java b/400_xowa/src/gplx/xowa/apps/servers/http/Http_server_mgr.java index d424b8e1c..b57658150 100644 --- a/400_xowa/src/gplx/xowa/apps/servers/http/Http_server_mgr.java +++ b/400_xowa/src/gplx/xowa/apps/servers/http/Http_server_mgr.java @@ -110,8 +110,10 @@ public class Http_server_mgr implements Gfo_invk { // generate ttl of domain/wiki/page; needed for pages with leading slash; EX: "/abcd" -> "en.wikipedia.org/wiki//abcd"; ISSUE#:301; DATE:2018-12-16 else { Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); - tmp_bfr.Add(wiki.Domain_bry()).Add(gplx.xowa.htmls.hrefs.Xoh_href_.Bry__wiki).Add(ttl_bry); - ttl_bry = tmp_bfr.To_bry_and_clear_and_rls(); + try { + tmp_bfr.Add(wiki.Domain_bry()).Add(gplx.xowa.htmls.hrefs.Xoh_href_.Bry__wiki).Add(ttl_bry); + ttl_bry = tmp_bfr.To_bry_and_clear(); + } finally {tmp_bfr.Mkr_rls();} } Xoa_url url = wiki.Utl__url_parser().Parse(ttl_bry); Xoa_ttl ttl = Xoa_ttl.Parse(wiki, url.To_bry_page_w_anch()); // changed from ttl_bry to page_w_anch; DATE:2017-07-24 diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java index 73f7f5285..41c155ce5 100644 --- a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java +++ b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java @@ -48,6 +48,7 @@ public class Xoh_page_wtr_wkr { break; } Bry_bfr page_bfr = wiki.Utl__bfr_mkr().Get_m001(); // NOTE: get separate page rv to output page; do not reuse tmp_bfr b/c it will be used inside Fmt_do + try { Xoh_wtr_ctx hctx = null; if (page_mode == Xopg_page_.Tid_html && wiki.Html__hdump_mgr().Load_mgr().Html_mode().Tid() == Xow_hdump_mode.Hdump_save.Tid()) { @@ -65,6 +66,7 @@ public class Xoh_page_wtr_wkr { Write_page_by_tid(ctx, hctx, page_mode, rv, mgr.Page_html_fmtr(), Gfh_utl.Escape_html_as_bry(rv.To_bry_and_clear())); wdata_lang_wtr.Page_(null); } + } finally {page_bfr.Mkr_rls();} } else Write_body(rv, ctx, Xoh_wtr_ctx.Basic, page); @@ -183,6 +185,7 @@ public class Xoh_page_wtr_wkr { // get separate bfr; note that bfr already has and written to it, so this can't be passed to tidy; DATE:2014-06-11 Bry_bfr tidy_bfr = wiki.Utl__bfr_mkr().Get_m001(); + try { // write wikitext if (page.Html_data().Skip_parse()) { tidy_bfr.Add(page.Html_data().Custom_body()); @@ -206,7 +209,9 @@ public class Xoh_page_wtr_wkr { // add back to main bfr bfr.Add_bfr_and_clear(tidy_bfr); - tidy_bfr.Mkr_rls(); + } finally { + tidy_bfr.Mkr_rls(); + } // handle Categories at bottom of page; note that html is XOWA-generated so does not need to be tidied int ctgs_len = page.Wtxt().Ctgs__len(); diff --git a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_tmpl_wtr.java b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_tmpl_wtr.java index e9a9c90a4..4d38c6e1e 100644 --- a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_tmpl_wtr.java +++ b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_tmpl_wtr.java @@ -19,9 +19,11 @@ import gplx.xowa.parsers.xndes.*; import gplx.xowa.parsers.miscs.*; public class Xot_tmpl_wtr { public static byte[] Write_all(Xop_ctx ctx, Xot_invk frame, Xop_root_tkn root, byte[] src) { Bry_bfr bfr = ctx.Wiki().Utl__bfr_mkr().Get_m001().Reset_if_gt(Io_mgr.Len_mb); - Write_tkn(bfr, ctx, frame, src, src.length, root); - byte[] rv = bfr.To_bry_and_rls(); - return ctx.Wiki().Parser_mgr().Uniq_mgr().Parse(rv); // NOTE: noops if no UNIQs; // UNIQ; DATE:2017-03-31 + try { + Write_tkn(bfr, ctx, frame, src, src.length, root); + byte[] rv = bfr.To_bry_and_clear(); + return ctx.Wiki().Parser_mgr().Uniq_mgr().Parse(rv); // NOTE: noops if no UNIQs; // UNIQ; DATE:2017-03-31 + } finally {bfr.Mkr_rls();} } private static void Write_tkn(Bry_bfr rslt_bfr, Xop_ctx ctx, Xot_invk frame, byte[] src, int src_len, Xop_tkn_itm tkn) { switch (tkn.Tkn_tid()) { diff --git a/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_tkn.java b/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_tkn.java index 8616b2065..aa43f5405 100644 --- a/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_tkn.java +++ b/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_tkn.java @@ -112,6 +112,7 @@ public class Xop_xnde_tkn extends Xop_tkn_itm_base implements Xop_tblw_tkn { cur_bfr = ctx.Wiki().Utl__bfr_mkr().Get_m001().Reset_if_gt(Io_mgr.Len_mb); } + try { // write tag_bgn; EX: cur_bfr.Add_mid(src, tag_open_bgn, tag_open_end); @@ -135,6 +136,11 @@ public class Xop_xnde_tkn extends Xop_tkn_itm_base implements Xop_tblw_tkn { byte[] key = ctx.Wiki().Parser_mgr().Uniq_mgr().Add(Bool_.Y, tag.Name_bry(), val); bfr.Add(key); } + } finally { + if (is_tmpl_mode) { + cur_bfr.Mkr_rls(); + } + } } break; } diff --git a/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_itm.java b/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_itm.java index 0de427eb5..88dda0025 100644 --- a/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_itm.java +++ b/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_itm.java @@ -44,8 +44,12 @@ public class Lst_pfunc_itm { // eval tmpl Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); - tmpl.Tmpl_evaluate(sub_ctx, Xot_invk_temp.Page_is_caller, tmp_bfr); - sub_src = tmp_bfr.To_bry_and_rls(); + try { + tmpl.Tmpl_evaluate(sub_ctx, Xot_invk_temp.Page_is_caller, tmp_bfr); + sub_src = tmp_bfr.To_bry_and_clear(); + } finally { + tmp_bfr.Mkr_rls(); + } // parse again if (!wiki.Parser_mgr().Tmpl_stack_add(ttl.Full_db())) return null; // put template back on stack; diff --git a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java index 481cbb7d4..24302bee9 100644 --- a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java +++ b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java @@ -324,6 +324,7 @@ public class Pp_pages_nde implements Xox_xnde, Mwh_atr_itm_owner1 { Xoa_ttl end_page_ttl = end_page_bry == null ? null : ary[ary_len - 1]; Bry_bfr page_bfr = wiki.Utl__bfr_mkr().Get_m001(); + try { for (int i = 0; i < ary_len; i++) { Xoa_ttl ttl = ary[i]; byte[] ttl_page_db = ttl.Page_db(); @@ -351,7 +352,10 @@ public class Pp_pages_nde implements Xox_xnde, Mwh_atr_itm_owner1 { full_bfr.Add_bfr_and_clear(page_bfr); full_bfr.Add(gplx.langs.htmls.entitys.Gfh_entity_.Space_bry); // $out.= " "; REF.MW:ProofreadPageRenderer.pn } - page_bfr.Mkr_rls(); + } + finally { + page_bfr.Mkr_rls(); + } return full_bfr.To_bry_and_clear(); } private Xop_root_tkn Bld_root_nde(Bry_bfr page_bfr, Hash_adp_bry lst_page_regy, byte[] wikitext) { diff --git a/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java b/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java index a8c03cf3e..d1295f81e 100644 --- a/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java +++ b/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java @@ -131,8 +131,11 @@ public class Score_xnde implements Xox_xnde, Mwh_atr_itm_owner1, Xoh_cmd_itm { } else { Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); - ly_text = code_is_raw ? code : score_xtn.Lilypond_fmtr().Bld_bry_many(tmp_bfr, Score_xtn_mgr.Lilypond_version, code); - tmp_bfr.Mkr_rls(); + try { + ly_text = code_is_raw ? code : score_xtn.Lilypond_fmtr().Bld_bry_many(tmp_bfr, Score_xtn_mgr.Lilypond_version, code); + } finally { + tmp_bfr.Mkr_rls(); + } Io_mgr.Instance.SaveFilBry(ly_file, ly_text); } ly_process.Working_dir_(ly_file.OwnerDir()); // NOTE: must change working_dir, else file will be dumped into same dir as lilypond.exe