postgres.git / summary / log / commit / refs
commit 3ccae5445cc82ce93c660a2b21a244a51dbe30a6
Author: Joe Conway <mail@joeconway.com>
Date: Thu May 28 17:16:56 2020 +0000
First released in: 13.0, 9.5.23, 9.6.19, 10.14, 11.9, 12.4
Add CHECK_FOR_INTERRUPTS() to the repeat() function
The repeat() function loops for potentially a long time without
ever checking for interrupts. This prevents, for example, a query
cancel from interrupting until the work is all done. Fix by
inserting a CHECK_FOR_INTERRUPTS() into the loop.
Backpatch to all supported versions.
Discussion: https://www.postgresql.org/message-id/flat/8692553c-7fe8-17d9-cbc1-7cddb758f4c6%40joeconway.com
src/backend/utils/adt/oracle_compat.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/backend/utils/adt/oracle_compat.c b/src/backend/utils/adt/oracle_compat.c
index 0fdfee58253..ecd8268b23b 100644
--- a/src/backend/utils/adt/oracle_compat.c
+++ b/src/backend/utils/adt/oracle_compat.c
@@ -19,7 +19,7 @@
#include "utils/builtins.h"
#include "utils/formatting.h"
#include "mb/pg_wchar.h"
-
+#include "miscadmin.h"
static text *dotrim(const char *string, int stringlen,
const char *set, int setlen,
@@ -1062,6 +1062,7 @@ repeat(PG_FUNCTION_ARGS)
{
memcpy(cp, sp, slen);
cp += slen;
+ CHECK_FOR_INTERRUPTS();
}
PG_RETURN_TEXT_P(result);
[parent: 7b009944c252]