summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane2003-11-14 17:30:41 +0000
committerTom Lane2003-11-14 17:30:41 +0000
commit81e51ddc14ba41b435681810cf845e6a9febb037 (patch)
treefb3a3d433459d2128d392a9b8445447c79774571 /src
parent0104fc11b98ae38fd226215fa2875389c91fd6ab (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.c24
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;