Commit f8c81c5d authored by Andrew Dunstan's avatar Andrew Dunstan

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,
parent 4c60b800
...@@ -63,7 +63,28 @@ exec_prog(const char *log_file, const char *opt_log_file, ...@@ -63,7 +63,28 @@ exec_prog(const char *log_file, const char *opt_log_file,
if (written >= MAXCMDLEN) if (written >= MAXCMDLEN)
pg_log(PG_FATAL, "command too long\n"); 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); pg_log(PG_FATAL, "cannot write to log file %s\n", log_file);
#ifdef WIN32 #ifdef WIN32
fprintf(log, "\n\n"); fprintf(log, "\n\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment