* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Header: /cvsroot/pgsql/src/backend/access/transam/clog.c,v 1.12 2003/04/14 17:31:33 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/clog.c,v 1.13 2003/05/02 21:52:42 momjian Exp $
*
*-------------------------------------------------------------------------
*/
* The value is automatically inherited by backends via fork, and
* doesn't need to be in shared memory.
*/
-static LWLockId ClogBufferLocks[NUM_CLOG_BUFFERS]; /* Per-buffer I/O locks */
+static LWLockId *ClogBufferLocks; /* Per-buffer I/O locks */
/*
* ClogDir is set during CLOGShmemInit and does not change thereafter.
/*
* Initialization of shared memory for CLOG
*/
-
int
CLOGShmemSize(void)
{
- return MAXALIGN(sizeof(ClogCtlData) + CLOG_BLCKSZ * NUM_CLOG_BUFFERS);
+ return MAXALIGN(sizeof(ClogCtlData) + CLOG_BLCKSZ * NUM_CLOG_BUFFERS)
+#ifdef EXEC_BACKEND
+ + MAXALIGN(NUM_CLOG_BUFFERS * sizeof(LWLockId))
+#endif
+ ;
}
+
void
CLOGShmemInit(void)
{
bool found;
- char *bufptr;
int slotno;
+ /* Handle ClogCtl */
+
/* this must agree with space requested by CLOGShmemSize() */
- ClogCtl = (ClogCtlData *)
- ShmemInitStruct("CLOG Ctl",
- MAXALIGN(sizeof(ClogCtlData) +
- CLOG_BLCKSZ * NUM_CLOG_BUFFERS),
- &found);
- Assert(!found);
+ ClogCtl = (ClogCtlData *) ShmemInitStruct("CLOG Ctl",
+ MAXALIGN(sizeof(ClogCtlData) +
+ CLOG_BLCKSZ * NUM_CLOG_BUFFERS), &found);
- memset(ClogCtl, 0, sizeof(ClogCtlData));
+ if (!IsUnderPostmaster)
+ /* Initialize ClogCtl shared memory area */
+ {
+ char *bufptr;
- bufptr = ((char *) ClogCtl) + sizeof(ClogCtlData);
+ Assert(!found);
- for (slotno = 0; slotno < NUM_CLOG_BUFFERS; slotno++)
- {
- ClogCtl->page_buffer[slotno] = bufptr;
- ClogCtl->page_status[slotno] = CLOG_PAGE_EMPTY;
- ClogBufferLocks[slotno] = LWLockAssign();
- bufptr += CLOG_BLCKSZ;
- }
+ memset(ClogCtl, 0, sizeof(ClogCtlData));
+
+ bufptr = (char *)ClogCtl + sizeof(ClogCtlData);
+
+ for (slotno = 0; slotno < NUM_CLOG_BUFFERS; slotno++)
+ {
+ ClogCtl->page_buffer[slotno] = bufptr;
+ ClogCtl->page_status[slotno] = CLOG_PAGE_EMPTY;
+ bufptr += CLOG_BLCKSZ;
+ }
- /* ClogCtl->latest_page_number will be set later */
+ /* ClogCtl->latest_page_number will be set later */
+ }
+ else
+ Assert(found);
+
+ /* Handle ClogBufferLocks */
+
+#ifdef EXEC_BACKEND
+ ClogBufferLocks = (LWLockId *) ShmemInitStruct("CLOG Buffer Locks",
+ NUM_CLOG_BUFFERS * sizeof(LWLockId), &found);
+ Assert((!found && !IsUnderPostmaster) || (found && IsUnderPostmaster));
+#else
+ ClogBufferLocks = malloc(NUM_CLOG_BUFFERS * sizeof(LWLockId));
+ Assert(ClogBufferLocks);
+#endif
+
+ if (!IsUnderPostmaster)
+ for (slotno = 0; slotno < NUM_CLOG_BUFFERS; slotno++)
+ ClogBufferLocks[slotno] = LWLockAssign();
/* Init CLOG directory path */
snprintf(ClogDir, MAXPGPATH, "%s/pg_clog", DataDir);
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.315 2003/04/26 02:57:14 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.316 2003/05/02 21:52:42 momjian Exp $
*
* NOTES
*
static int ServerSock_UNIX = INVALID_SOCK; /* stream socket server */
#endif
+/* Used to reduce macros tests */
+#ifdef EXEC_BACKEND
+const bool ExecBackend = true;
+#else
+const bool ExecBackend = false;
+#endif
+
/*
* Set by the -o option
*/
elog(DEBUG1, "processCancelRequest: CheckPointPID in cancel request for process %d", backendPID);
return;
}
-
+ else if (ExecBackend)
+ {
+ AttachSharedMemoryAndSemaphores();
+ }
+
/* See if we have a matching backend */
for (curr = DLGetHead(BackendList); curr; curr = DLGetSucc(curr))
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: miscadmin.h,v 1.118 2003/04/06 22:45:23 petere Exp $
+ * $Id: miscadmin.h,v 1.119 2003/05/02 21:52:42 momjian Exp $
*
* NOTES
* some of the information in this file should be moved to
*/
extern bool IsUnderPostmaster;
extern bool ClientAuthInProgress;
+extern const bool ExecBackend;
extern int PostmasterMain(int argc, char *argv[]);
extern void ClosePostmasterPorts(bool pgstat_too);