diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2008-02-20 17:44:20 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2008-02-20 17:44:20 +0000 |
commit | d64f38d1a15b4731e17f5ea1920fd701f3b0c66f (patch) | |
tree | ea90dea200ff2db8d144881fb7538eed120310ef | |
parent | f8dc95540e6a9b5c8071c3df782998d3ca421946 (diff) | |
download | postgresql-d64f38d1a15b4731e17f5ea1920fd701f3b0c66f.tar.gz postgresql-d64f38d1a15b4731e17f5ea1920fd701f3b0c66f.zip |
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.
-rw-r--r-- | src/backend/catalog/catalog.c | 6 |
1 files changed, 5 insertions, 1 deletions
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); |