postgres.git / summary / log / commit / refs

commit    5ce6829b73b28a3664268c8ba6dae3961c7ca23f
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Wed Feb 20 17:44:09 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 bc94a5ca2aa..872135affeb 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.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) /* Generate new OIDs until we find one not in the table */ do { + CHECK_FOR_INTERRUPTS(); + newOid = GetNewObjectId(); ScanKeyInit(&key, @@ -423,6 +425,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: f78611bba4b9]