diff options
author | Joe Conway <mail@joeconway.com> | 2020-05-28 13:17:20 -0400 |
---|---|---|
committer | Joe Conway <mail@joeconway.com> | 2020-05-28 13:17:20 -0400 |
commit | 28e2c6eacc69e2a186d6fe5d2b9c55c5f978d368 (patch) | |
tree | b5a21fa023ca7e572615f464031c01f69f9a6e79 /src/backend/utils/adt/oracle_compat.c | |
parent | d2d1a53ee99d4bfe95a82f176e6bdf3f07a303ef (diff) |
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
Diffstat (limited to 'src/backend/utils/adt/oracle_compat.c')
-rw-r--r-- | src/backend/utils/adt/oracle_compat.c | 3 |
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 377a6502b49..4f5ee4dca62 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); |