diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c index a49f82033f2..2632df313b2 100644 --- a/src/pl/tcl/pltcl.c +++ b/src/pl/tcl/pltcl.c @@ -2156,9 +2156,9 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp, int j; Tcl_HashEntry *hashent; pltcl_query_desc *qdesc; - const char *volatile nulls = NULL; - CONST84 char *volatile arrayname = NULL; - CONST84 char *volatile loop_body = NULL; + const char *nulls = NULL; + CONST84 char *arrayname = NULL; + CONST84 char *loop_body = NULL; int count = 0; int callnargs; CONST84 char **callargs = NULL; @@ -2288,6 +2288,8 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp, if (i != argc) { Tcl_SetResult(interp, usage, TCL_STATIC); + if (callargs) + ckfree((char *) callargs); return TCL_ERROR; } @@ -2326,10 +2328,6 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp, } } - if (callargs) - ckfree((char *) callargs); - callargs = NULL; - /************************************************************ * Execute the plan ************************************************************/ @@ -2356,6 +2354,9 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp, } PG_END_TRY(); + if (callargs) + ckfree((char *) callargs); + return my_rc; }