* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.142 2002/09/22 19:42:50 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.143 2002/09/25 20:31:40 tgl Exp $
*
*-------------------------------------------------------------------------
*/
BaseInit();
+ if (IsUnderPostmaster)
+ InitDummyProcess(); /* needed to get LWLocks */
+
/*
* XLOG operations
*/
break;
case BS_XLOG_CHECKPOINT:
- if (IsUnderPostmaster)
- InitDummyProcess(); /* needed to get LWLocks */
CreateDummyCaches();
CreateCheckPoint(false);
SetSavedRedoRecPtr(); /* pass redo ptr back to
*
* Copyright (c) 2001, PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v 1.28 2002/09/05 18:26:18 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v 1.29 2002/09/25 20:31:40 tgl Exp $
* ----------
*/
#include "postgres.h"
IsUnderPostmaster = true; /* we are a postmaster subprocess now */
+ MyProcPid = getpid(); /* reset MyProcPid */
+
/* Lose the postmaster's on-exit routines */
on_exit_reset();
*/
pqsignal(SIGCHLD, SIG_DFL);
+ MyProcPid = getpid(); /* reset MyProcPid */
+
/*
* Identify myself via ps
*/
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.52 2002/09/04 20:31:25 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.53 2002/09/25 20:31:40 tgl Exp $
*
*-------------------------------------------------------------------------
*/
#include "utils/memutils.h"
-static void ShutdownBufferPoolAccess(void);
-
/*
* if BMTRACE is defined, we trace the last 200 buffer allocations and
* deallocations in a circular buffer in shared memory.
* This is called during backend startup (whether standalone or under the
* postmaster). It sets up for this backend's access to the already-existing
* buffer pool.
+ *
+ * NB: this is called before InitProcess(), so we do not have a PGPROC and
+ * cannot do LWLockAcquire; hence we can't actually access the bufmgr's
+ * shared memory yet. We are only initializing local data here.
*/
void
InitBufferPoolAccess(void)
*/
for (i = 0; i < NBuffers; i++)
BufferBlockPointers[i] = (Block) MAKE_PTR(BufferDescriptors[i].data);
-
- /*
- * Now that buffer access is initialized, set up a callback to shut it
- * down again at backend exit.
- */
- on_shmem_exit(ShutdownBufferPoolAccess, 0);
-}
-
-/*
- * Shut down buffer manager at backend exit.
- *
- * This is needed mainly to ensure that we don't leave any buffer reference
- * counts set during an error exit.
- */
-static void
-ShutdownBufferPoolAccess(void)
-{
- /* Release any buffer context locks we are holding */
- UnlockBuffers();
- /* Release any buffer reference counts we are holding */
- AtEOXact_Buffers(false);
}
/* -----------------------------------------------------
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lwlock.c,v 1.13 2002/09/04 20:31:26 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lwlock.c,v 1.14 2002/09/25 20:31:40 tgl Exp $
*
*-------------------------------------------------------------------------
*/
PRINT_LWDEBUG("LWLockAcquire", lockid, lock);
+ /*
+ * We can't wait if we haven't got a PGPROC. This should only occur
+ * during bootstrap or shared memory initialization. Put an Assert
+ * here to catch unsafe coding practices.
+ */
+ Assert(!(proc == NULL && IsUnderPostmaster));
+
/*
* Lock out cancel/die interrupts until we exit the code section
* protected by the LWLock. This ensures that interrupts will not
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.125 2002/09/04 20:31:26 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.126 2002/09/25 20:31:40 tgl Exp $
*
*-------------------------------------------------------------------------
*/
/* Release any LW locks I am holding */
LWLockReleaseAll();
- /* Abort any buffer I/O in progress */
+ /*
+ * Make real sure we release any buffer locks and pins we might be
+ * holding, too. It is pretty ugly to do this here and not in a
+ * shutdown callback registered by the bufmgr ... but we must do this
+ * *after* LWLockReleaseAll and *before* zapping MyProc.
+ */
AbortBufferIO();
+ UnlockBuffers();
+ AtEOXact_Buffers(false);
/* Get off any wait queue I might be on */
LockWaitCancel();
/* Release any LW locks I am holding */
LWLockReleaseAll();
- /* Abort any buffer I/O in progress */
+ /* Release buffer locks and pins, too */
AbortBufferIO();
+ UnlockBuffers();
+ AtEOXact_Buffers(false);
/* I can't be on regular lock queues, so needn't check */
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.293 2002/09/20 03:45:08 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.294 2002/09/25 20:31:40 tgl Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
}
}
+ /*
+ * initialize globals (already done if under postmaster, but not if
+ * standalone; cheap enough to do over)
+ */
+
+ MyProcPid = getpid();
+
/*
* Fire up essential subsystems: error and memory management
*
if (!IsUnderPostmaster)
{
puts("\nPOSTGRES backend interactive interface ");
- puts("$Revision: 1.293 $ $Date: 2002/09/20 03:45:08 $\n");
+ puts("$Revision: 1.294 $ $Date: 2002/09/25 20:31:40 $\n");
}
/*