mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-30 19:00:29 +08:00
In pg_upgrade, try a few times to open a log file.
If we call pg_ctl stop, the server might continue and thus hold a log file for a short time after it has deleted its pid file, (which is when pg_ctl will exit), and so a subsequent attempt to open the log file might fail. We therefore try to open it a few times, sleeping one second between tries, to give the server time to exit. This corrects an error that was observed on the buildfarm. Backpatched to 9.2,
This commit is contained in:
parent
4c60b80094
commit
f8c81c5dde
@ -63,7 +63,28 @@ exec_prog(const char *log_file, const char *opt_log_file,
|
||||
if (written >= MAXCMDLEN)
|
||||
pg_log(PG_FATAL, "command too long\n");
|
||||
|
||||
if ((log = fopen_priv(log_file, "a")) == NULL)
|
||||
log = fopen_priv(log_file, "a");
|
||||
|
||||
#ifdef WIN32
|
||||
{
|
||||
/*
|
||||
* "pg_ctl -w stop" might have reported that the server has
|
||||
* stopped because the postmaster.pid file has been removed,
|
||||
* but "pg_ctl -w start" might still be in the process of
|
||||
* closing and might still be holding its stdout and -l log
|
||||
* file descriptors open. Therefore, try to open the log
|
||||
* file a few more times.
|
||||
*/
|
||||
int iter;
|
||||
for (iter = 0; iter < 4 && log == NULL; iter++)
|
||||
{
|
||||
sleep(1);
|
||||
log = fopen_priv(log_file, "a");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (log == NULL)
|
||||
pg_log(PG_FATAL, "cannot write to log file %s\n", log_file);
|
||||
#ifdef WIN32
|
||||
fprintf(log, "\n\n");
|
||||
|
Loading…
Reference in New Issue
Block a user