|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.163 2002/04/27 21:24:34 tgl Exp $ |
| 11 | + * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.164 2002/05/22 15:57:40 tgl Exp $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
@@ -1841,35 +1841,39 @@ RelationForgetRelation(Oid rid)
|
1841 | 1841 |
|
1842 | 1842 | RelationIdCacheLookup(rid,relation);
|
1843 | 1843 |
|
1844 |
| -if (PointerIsValid(relation)) |
| 1844 | +if (!PointerIsValid(relation)) |
| 1845 | +return;/* not in cache, nothing to do */ |
| 1846 | + |
| 1847 | +if (!RelationHasReferenceCountZero(relation)) |
| 1848 | +elog(ERROR,"RelationForgetRelation: relation %u is still open",rid); |
| 1849 | + |
| 1850 | +/* If local, remove from list */ |
| 1851 | +if (relation->rd_myxactonly) |
1845 | 1852 | {
|
1846 |
| -if (relation->rd_myxactonly) |
1847 |
| -{ |
1848 |
| -List*curr; |
1849 |
| -List*prev=NIL; |
| 1853 | +List*curr; |
| 1854 | +List*prev=NIL; |
1850 | 1855 |
|
1851 |
| -foreach(curr,newlyCreatedRelns) |
1852 |
| -{ |
1853 |
| -Relationreln=lfirst(curr); |
| 1856 | +foreach(curr,newlyCreatedRelns) |
| 1857 | +{ |
| 1858 | +Relationreln=lfirst(curr); |
1854 | 1859 |
|
1855 |
| -Assert(reln!=NULL&&reln->rd_myxactonly); |
1856 |
| -if (RelationGetRelid(reln)==rid) |
1857 |
| -break; |
1858 |
| -prev=curr; |
1859 |
| -} |
1860 |
| -if (curr==NIL) |
1861 |
| -elog(FATAL,"Local relation %s not found in list", |
1862 |
| -RelationGetRelationName(relation)); |
1863 |
| -if (prev==NIL) |
1864 |
| -newlyCreatedRelns=lnext(newlyCreatedRelns); |
1865 |
| -else |
1866 |
| -lnext(prev)=lnext(curr); |
1867 |
| -pfree(curr); |
| 1860 | +Assert(reln!=NULL&&reln->rd_myxactonly); |
| 1861 | +if (RelationGetRelid(reln)==rid) |
| 1862 | +break; |
| 1863 | +prev=curr; |
1868 | 1864 | }
|
1869 |
| - |
1870 |
| -/* Unconditionally destroy the relcache entry */ |
1871 |
| -RelationClearRelation(relation, false); |
| 1865 | +if (curr==NIL) |
| 1866 | +elog(ERROR,"Local relation %s not found in list", |
| 1867 | +RelationGetRelationName(relation)); |
| 1868 | +if (prev==NIL) |
| 1869 | +newlyCreatedRelns=lnext(newlyCreatedRelns); |
| 1870 | +else |
| 1871 | +lnext(prev)=lnext(curr); |
| 1872 | +pfree(curr); |
1872 | 1873 | }
|
| 1874 | + |
| 1875 | +/* Unconditionally destroy the relcache entry */ |
| 1876 | +RelationClearRelation(relation, false); |
1873 | 1877 | }
|
1874 | 1878 |
|
1875 | 1879 | /*
|
|