From 9ad3623494ffa0d29cac2ab2a98fd7257b786b1b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 20 Feb 2008 17:44:20 +0000 Subject: [PATCH] Put a CHECK_FOR_INTERRUPTS call into the loops that try to find a unique new OID or new relfilenode. If the existing OIDs are sufficiently densely populated, this could take a long time (perhaps even be an infinite loop), so it seems wise to allow the system to respond to a cancel interrupt here. Per a gripe from Jacky Leng. Backpatch as far as 8.1. Older versions just fail on OID collision, instead of looping. --- src/backend/catalog/catalog.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c index f0938de219..264cb689e4 100644 --- a/src/backend/catalog/catalog.c +++ b/src/backend/catalog/catalog.c @@ -368,6 +368,8 @@ GetNewOidWithIndex(Relation relation, Relation indexrel) /* Generate new OIDs until we find one not in the table */ do { + CHECK_FOR_INTERRUPTS(); + newOid = GetNewObjectId(); ScanKeyInit(&key, @@ -417,6 +419,8 @@ GetNewRelFileNode(Oid reltablespace, bool relisshared, Relation pg_class) do { + CHECK_FOR_INTERRUPTS(); + /* Generate the OID */ if (pg_class) rnode.relNode = GetNewOid(pg_class); -- 2.39.5