From: Tom Lane Date: Fri, 18 Mar 2005 16:16:20 +0000 (+0000) Subject: Need to reset local buffer pin counts, not only shared buffer pins, X-Git-Tag: REL8_0_2~41 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=817bc021b76a8d34a8947be5ff037b27778c651f;p=thirdparty%2Fpostgresql.git Need to reset local buffer pin counts, not only shared buffer pins, before we attempt any file deletions in ShutdownPostgres. Per Tatsuo. --- diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c index d8737427029..16767b12df3 100644 --- a/src/backend/storage/buffer/localbuf.c +++ b/src/backend/storage/buffer/localbuf.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.62 2005/01/10 20:02:21 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.62.4.1 2005/03/18 16:16:20 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -241,3 +241,17 @@ AtEOXact_LocalBuffers(bool isCommit) } #endif } + +/* + * AtProcExit_LocalBuffers - ensure we have dropped pins during backend exit. + * + * This is just like AtProcExit_Buffers, but for local buffers. We have + * to drop pins to ensure that any attempt to drop temp files doesn't + * fail in DropRelFileNodeBuffers. + */ +void +AtProcExit_LocalBuffers(void) +{ + /* just zero the refcounts ... */ + MemSet(LocalRefCount, 0, NLocBuffer * sizeof(*LocalRefCount)); +} diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 16d54ca0ba4..286e7d32f19 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.139.4.1 2005/03/18 05:24:24 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.139.4.2 2005/03/18 16:16:20 tgl Exp $ * * *------------------------------------------------------------------------- @@ -478,6 +478,7 @@ ShutdownPostgres(int code, Datum arg) */ LWLockReleaseAll(); AtProcExit_Buffers(); + AtProcExit_LocalBuffers(); /* * In case a transaction is open, delete any files it created. This diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index 4ac499cf350..34582828d50 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.89 2004/12/31 22:03:42 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.89.4.1 2005/03/18 16:16:20 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -153,5 +153,6 @@ extern void BufmgrCommit(void); extern int BufferSync(int percent, int maxpages); extern void InitLocalBuffer(void); +extern void AtProcExit_LocalBuffers(void); #endif