diff options
author | Tom Lane | 2003-11-14 17:30:41 +0000 |
---|---|---|
committer | Tom Lane | 2003-11-14 17:30:41 +0000 |
commit | 81e51ddc14ba41b435681810cf845e6a9febb037 (patch) | |
tree | fb3a3d433459d2128d392a9b8445447c79774571 /src | |
parent | 0104fc11b98ae38fd226215fa2875389c91fd6ab (diff) |
Add fflush() before popen() calls; avoids any possible problem with
double or out-of-sequence output with child process.
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/initdb/initdb.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 9762a856ff..9de258f88a 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -42,7 +42,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/src/bin/initdb/initdb.c,v 1.8 2003/11/14 17:19:35 tgl Exp $ + * $Header: /cvsroot/pgsql/src/bin/initdb/initdb.c,v 1.9 2003/11/14 17:30:41 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -204,22 +204,24 @@ static void *xmalloc(size_t); #define PG_CMD_OPEN \ do { \ - pg = popen(cmd,PG_BINARY_W); \ - if (pg == NULL) \ - exit_nicely(); \ + fflush(stdout); \ + fflush(stderr); \ + pg = popen(cmd, PG_BINARY_W); \ + if (pg == NULL) \ + exit_nicely(); \ } while (0) #define PG_CMD_CLOSE \ do { \ - if ((pclose(pg) >> 8) & 0xff) \ - exit_nicely(); \ + if ((pclose(pg) >> 8) & 0xff) \ + exit_nicely(); \ } while (0) #define PG_CMD_PUTLINE \ do { \ - if (fputs(*line, pg) < 0) \ - exit_nicely(); \ - fflush(pg); \ + if (fputs(*line, pg) < 0) \ + exit_nicely(); \ + fflush(pg); \ } while (0) #ifndef WIN32 @@ -862,6 +864,10 @@ find_postgres(char *path) snprintf(cmd, sizeof(cmd), "\"%s/postgres\" -V 2>%s", path, DEVNULL); + /* flush output buffers in case popen does not... */ + fflush(stdout); + fflush(stderr); + if ((pgver = popen(cmd, "r")) == NULL) return FIND_EXEC_ERR; |