提交 5ce6829b 编写于 作者: T Tom Lane

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.
上级 f78611bb
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/catalog/catalog.c,v 1.72 2008/01/01 19:45:48 momjian Exp $ * $PostgreSQL: pgsql/src/backend/catalog/catalog.c,v 1.73 2008/02/20 17:44:09 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -374,6 +374,8 @@ GetNewOidWithIndex(Relation relation, Relation indexrel) ...@@ -374,6 +374,8 @@ GetNewOidWithIndex(Relation relation, Relation indexrel)
/* Generate new OIDs until we find one not in the table */ /* Generate new OIDs until we find one not in the table */
do do
{ {
CHECK_FOR_INTERRUPTS();
newOid = GetNewObjectId(); newOid = GetNewObjectId();
ScanKeyInit(&key, ScanKeyInit(&key,
...@@ -423,6 +425,8 @@ GetNewRelFileNode(Oid reltablespace, bool relisshared, Relation pg_class) ...@@ -423,6 +425,8 @@ GetNewRelFileNode(Oid reltablespace, bool relisshared, Relation pg_class)
do do
{ {
CHECK_FOR_INTERRUPTS();
/* Generate the OID */ /* Generate the OID */
if (pg_class) if (pg_class)
rnode.relNode = GetNewOid(pg_class); rnode.relNode = GetNewOid(pg_class);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册