postgres.git / summary / log / commit / refs
commit d64f38d1a15b4731e17f5ea1920fd701f3b0c66f
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed Feb 20 17:44:20 2008 +0000
First released in: 8.4.0, 8.1.12, 8.2.7, 8.3.1
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 | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c
index d302f023a9c..7c6800a812b 100644
--- a/src/backend/catalog/catalog.c
+++ b/src/backend/catalog/catalog.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/catalog/catalog.c,v 1.68 2006/10/04 00:29:50 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/catalog/catalog.c,v 1.68.2.1 2008/02/20 17:44:20 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -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);
[parent: f8dc95540e6a]