@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
* $ PostgreSQL : pgsql / src / backend / postmaster / postmaster . c , v 1.58 9 2009 / 08 / 24 18 : 09 : 37 tgl Exp $
* $ PostgreSQL : pgsql / src / backend / postmaster / postmaster . c , v 1.590 2009 / 08 / 24 20 : 08 : 32 tgl Exp $
*
* NOTES
*
@ -191,7 +191,7 @@ static int SendStop = false;
/* still more option variables */
bool EnableSSL = false ;
bool SilentMode = false ; /* silent mode (-S) */
bool SilentMode = false ; /* silent_mode */
int PreAuthDelay = 0 ;
int AuthenticationTimeout = 60 ;
@ -744,7 +744,7 @@ PostmasterMain(int argc, char *argv[])
}
/*
* Fork away from controlling terminal , if - S specified .
* Fork away from controlling terminal , if silent_mode specified .
*
* Must do this before we grab any interlock files , else the interlocks
* will show the wrong PID .
@ -894,20 +894,6 @@ PostmasterMain(int argc, char *argv[])
*/
set_max_safe_fds ( ) ;
/*
* Load configuration files for client authentication .
*/
if ( ! load_hba ( ) )
{
/*
* It makes no sense continue if we fail to load the HBA file , since
* there is no way to connect to the database in this case .
*/
ereport ( FATAL ,
( errmsg ( " could not load pg_hba.conf " ) ) ) ;
}
load_ident ( ) ;
/*
* Initialize the list of active backends .
*/
@ -1023,6 +1009,20 @@ PostmasterMain(int argc, char *argv[])
*/
autovac_init ( ) ;
/*
* Load configuration files for client authentication .
*/
if ( ! load_hba ( ) )
{
/*
* It makes no sense to continue if we fail to load the HBA file ,
* since there is no way to connect to the database in this case .
*/
ereport ( FATAL ,
( errmsg ( " could not load pg_hba.conf " ) ) ) ;
}
load_ident ( ) ;
/*
* Remember postmaster startup time
*/
@ -1204,15 +1204,46 @@ reg_reply(DNSServiceRegistrationReplyErrorType errorCode, void *context)
/*
* Fork away from the controlling terminal ( - S option )
* Fork away from the controlling terminal ( silent_mode option )
*
* Since this requires disconnecting from stdin / stdout / stderr ( in case they ' re
* linked to the terminal ) , we re - point stdin to / dev / null and stdout / stderr
* to " postmaster.log " in the data directory , where we ' re already chdir ' d .
*/
static void
pmdaemonize ( void )
{
# ifndef WIN32
int i ;
const char * pmlogname = " postmaster.log " ;
int dvnull ;
int pmlog ;
pid_t pid ;
int res ;
/*
* Make sure we can open the files we ' re going to redirect to . If this
* fails , we want to complain before disconnecting . Mention the full path
* of the logfile in the error message , even though we address it by
* relative path .
*/
dvnull = open ( DEVNULL , O_RDONLY , 0 ) ;
if ( dvnull < 0 )
{
write_stderr ( " %s: could not open file \" %s \" : %s \n " ,
progname , DEVNULL , strerror ( errno ) ) ;
ExitPostmaster ( 1 ) ;
}
pmlog = open ( pmlogname , O_CREAT | O_WRONLY | O_APPEND , 0600 ) ;
if ( pmlog < 0 )
{
write_stderr ( " %s: could not open log file \" %s/%s \" : %s \n " ,
progname , DataDir , pmlogname , strerror ( errno ) ) ;
ExitPostmaster ( 1 ) ;
}
/*
* Okay to fork .
*/
pid = fork_process ( ) ;
if ( pid = = ( pid_t ) - 1 )
{
@ -1231,8 +1262,8 @@ pmdaemonize(void)
MyStartTime = time ( NULL ) ;
/*
* GH : If there ' s no setsid ( ) , we hopefully don ' t need silent mode . Until
* there ' s a better solution .
* Some systems use setsid ( ) to dissociate from the TTY ' s process group ,
* while on others it depends on stdin / stdout / stderr . Do both if possible .
*/
# ifdef HAVE_SETSID
if ( setsid ( ) < 0 )
@ -1242,14 +1273,26 @@ pmdaemonize(void)
ExitPostmaster ( 1 ) ;
}
# endif
i = open ( DEVNULL , O_RDWR , 0 ) ;
dup2 ( i , 0 ) ;
dup2 ( i , 1 ) ;
dup2 ( i , 2 ) ;
close ( i ) ;
/*
* Reassociate stdin / stdout / stderr . fork_process ( ) cleared any pending
* output , so this should be safe . The only plausible error is EINTR ,
* which just means we should retry .
*/
do {
res = dup2 ( dvnull , 0 ) ;
} while ( res < 0 & & errno = = EINTR ) ;
close ( dvnull ) ;
do {
res = dup2 ( pmlog , 1 ) ;
} while ( res < 0 & & errno = = EINTR ) ;
do {
res = dup2 ( pmlog , 2 ) ;
} while ( res < 0 & & errno = = EINTR ) ;
close ( pmlog ) ;
# else /* WIN32 */
/* not supported */
elog ( FATAL , " SilentMode not supported under WIN32 " ) ;
elog ( FATAL , " silent_mode is not supported under Windows " ) ;
# endif /* WIN32 */
}
@ -3241,8 +3284,8 @@ BackendInitialize(Port *port)
if ( ! load_hba ( ) )
{
/*
* It makes no sense continue if we fail to load the HBA file , since
* there is no way to connect to the database in this case .
* It makes no sense to continue if we fail to load the HBA file ,
* since there is no way to connect to the database in this case .
*/
ereport ( FATAL ,
( errmsg ( " could not load pg_hba.conf " ) ) ) ;