88 * Portions Copyright (c) 1994, Regents of the University of California
99 *
1010 * IDENTIFICATION
11- * $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.171 2003/12/20 17:31:21 momjian Exp $
11+ * $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.172 2003/12/25 03:52:50 momjian Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
4848
4949#define ALLOC (t ,c )((t *) calloc((unsigned)(c), sizeof(t)))
5050
51+ #ifdef EXEC_BACKEND
52+ typedef struct Port Port ;
53+ extern void SSDataBaseInit (int );
54+ extern void read_backend_variables (pid_t ,Port * );
55+ #endif
5156
5257extern int Int_yyparse (void );
5358static hashnode * AddStr (char * str ,int strlength ,int mderef );
@@ -238,7 +243,7 @@ BootstrapMain(int argc, char *argv[])
238243 *
239244 * If we are running under the postmaster, this is done already.
240245 */
241- if (!IsUnderPostmaster /* when exec || ExecBackend */ )
246+ if (!IsUnderPostmaster || ExecBackend )
242247MemoryContextInit ();
243248
244249/*
@@ -247,7 +252,7 @@ BootstrapMain(int argc, char *argv[])
247252
248253/* Set defaults, to be overriden by explicit options below */
249254dbname = NULL ;
250- if (!IsUnderPostmaster /* when exec || ExecBackend */ )
255+ if (!IsUnderPostmaster )
251256{
252257InitializeGUCOptions ();
253258potential_DataDir = getenv ("PGDATA" );/* Null if no PGDATA
@@ -285,24 +290,11 @@ BootstrapMain(int argc, char *argv[])
285290xlogop = atoi (optarg );
286291break ;
287292case 'p' :
288- {
289- /* indicates fork from postmaster */
290293#ifdef EXEC_BACKEND
291- char * p ;
292-
293- sscanf (optarg ,"%lu,%p," ,
294- & UsedShmemSegID ,
295- & UsedShmemSegAddr );
296- p = strchr (optarg ,',' );
297- if (p )
298- p = strchr (p + 1 ,',' );
299- if (p )
300- dbname = strdup (p + 1 );
301- #else
302- dbname = strdup (optarg );
294+ IsUnderPostmaster = true;
303295#endif
296+ dbname = strdup (optarg );
304297break ;
305- }
306298case 'B' :
307299SetConfigOption ("shared_buffers" ,optarg ,PGC_POSTMASTER ,PGC_S_ARGV );
308300break ;
@@ -347,12 +339,7 @@ BootstrapMain(int argc, char *argv[])
347339if (!dbname || argc != optind )
348340usage ();
349341
350- #ifdef EXEC_BACKEND
351- if (IsUnderPostmaster && MyProc /* ordinary backend */ )
352- AttachSharedMemoryAndSemaphores ();
353- #endif
354-
355- if (!IsUnderPostmaster /* when exec || ExecBackend */ )
342+ if (!IsUnderPostmaster || ExecBackend )
356343{
357344if (!potential_DataDir )
358345{
@@ -376,6 +363,9 @@ BootstrapMain(int argc, char *argv[])
376363{
377364#ifdef EXEC_BACKEND
378365read_nondefault_variables ();
366+ read_backend_variables (getpid (),NULL );
367+
368+ SSDataBaseInit (xlogop );
379369#endif
380370}
381371else
@@ -427,6 +417,10 @@ BootstrapMain(int argc, char *argv[])
427417SetProcessingMode (BootstrapProcessing );
428418IgnoreSystemIndexes (true);
429419
420+ #ifdef EXEC_BACKEND
421+ if (IsUnderPostmaster )
422+ AttachSharedMemoryAndSemaphores ();
423+ #endif
430424XLOGPathInit ();
431425
432426BaseInit ();