diff options
Diffstat (limited to 'src/pl/tcl/pltcl.c')
-rw-r--r-- | src/pl/tcl/pltcl.c | 14 |
1 files changed, 2 insertions, 12 deletions
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c index 8277d1ea857..fccd22b4f51 100644 --- a/src/pl/tcl/pltcl.c +++ b/src/pl/tcl/pltcl.c @@ -765,9 +765,10 @@ pltcl_handler(PG_FUNCTION_ARGS, bool pltrusted) retval = pltcl_func_handler(fcinfo, ¤t_call_state, pltrusted); } } - PG_CATCH(); + PG_FINALLY(); { /* Restore static pointer, then clean up the prodesc refcount if any */ + /* (We're being paranoid in case an error is thrown in context deletion) */ pltcl_current_call_state = save_call_state; if (current_call_state.prodesc != NULL) { @@ -775,20 +776,9 @@ pltcl_handler(PG_FUNCTION_ARGS, bool pltrusted) if (--current_call_state.prodesc->fn_refcount == 0) MemoryContextDelete(current_call_state.prodesc->fn_cxt); } - PG_RE_THROW(); } PG_END_TRY(); - /* Restore static pointer, then clean up the prodesc refcount if any */ - /* (We're being paranoid in case an error is thrown in context deletion) */ - pltcl_current_call_state = save_call_state; - if (current_call_state.prodesc != NULL) - { - Assert(current_call_state.prodesc->fn_refcount > 0); - if (--current_call_state.prodesc->fn_refcount == 0) - MemoryContextDelete(current_call_state.prodesc->fn_cxt); - } - return retval; } |