diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c index 8f9804696e5..d6b72f7d686 100644 --- a/src/pl/tcl/pltcl.c +++ b/src/pl/tcl/pltcl.c @@ -2233,9 +2233,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; @@ -2365,6 +2365,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; } @@ -2403,10 +2405,6 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp, } } - if (callargs) - ckfree((char *) callargs); - callargs = NULL; - /************************************************************ * Execute the plan ************************************************************/ @@ -2433,6 +2431,9 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp, } PG_END_TRY(); + if (callargs) + ckfree((char *) callargs); + return my_rc; }