aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Conway <mail@joeconway.com>2020-05-28 13:17:28 -0400
committerJoe Conway <mail@joeconway.com>2020-05-28 13:17:28 -0400
commitbfb9595a786e62359d0a2c1613f4acdd3e1b88e6 (patch)
tree4015afcafa5bdc8e1d507d30bc172301ae3d3e31
parentc893b99360a6c264aa5ece6e5f6c6fd96bd0b817 (diff)
downloadpostgresql-bfb9595a786e62359d0a2c1613f4acdd3e1b88e6.tar.gz
postgresql-bfb9595a786e62359d0a2c1613f4acdd3e1b88e6.zip
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
-rw-r--r--src/backend/utils/adt/oracle_compat.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/backend/utils/adt/oracle_compat.c b/src/backend/utils/adt/oracle_compat.c
index 8e896ebf16b..724289226e7 100644
--- a/src/backend/utils/adt/oracle_compat.c
+++ b/src/backend/utils/adt/oracle_compat.c
@@ -18,7 +18,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,
@@ -1068,6 +1068,7 @@ repeat(PG_FUNCTION_ARGS)
{
memcpy(cp, sp, slen);
cp += slen;
+ CHECK_FOR_INTERRUPTS();
}
PG_RETURN_TEXT_P(result);