From 18feafcc59d8d8eb7dd7d3326e5e7edd98321e00 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 24 Oct 2005 15:10:22 +0000 Subject: [PATCH] Ensure that a plpgsql LOOP with an empty body still executes at least one CHECK_FOR_INTERRUPTS() call, so that you can control-C out of the loop. Reported by Merlin Moncure. --- src/pl/plpgsql/src/pl_exec.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 721b1014fd..df82dd3dc1 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -3,7 +3,7 @@ * procedural language * * IDENTIFICATION - * $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.153 2005/10/15 02:49:49 momjian Exp $ + * $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.154 2005/10/24 15:10:22 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -974,6 +974,17 @@ exec_stmts(PLpgSQL_execstate * estate, List *stmts) { ListCell *s; + if (stmts == NIL) + { + /* + * Ensure we do a CHECK_FOR_INTERRUPTS() even though there is no + * statement. This prevents hangup in a tight loop if, for instance, + * there is a LOOP construct with an empty body. + */ + CHECK_FOR_INTERRUPTS(); + return PLPGSQL_RC_OK; + } + foreach(s, stmts) { PLpgSQL_stmt *stmt = (PLpgSQL_stmt *) lfirst(s); -- 2.40.0