Commit 81e51ddc authored by Tom Lane's avatar Tom Lane

Add fflush() before popen() calls; avoids any possible problem with

double or out-of-sequence output with child process.
parent 0104fc11
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * 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); ...@@ -204,22 +204,24 @@ static void *xmalloc(size_t);
#define PG_CMD_OPEN \ #define PG_CMD_OPEN \
do { \ do { \
pg = popen(cmd,PG_BINARY_W); \ fflush(stdout); \
if (pg == NULL) \ fflush(stderr); \
exit_nicely(); \ pg = popen(cmd, PG_BINARY_W); \
if (pg == NULL) \
exit_nicely(); \
} while (0) } while (0)
#define PG_CMD_CLOSE \ #define PG_CMD_CLOSE \
do { \ do { \
if ((pclose(pg) >> 8) & 0xff) \ if ((pclose(pg) >> 8) & 0xff) \
exit_nicely(); \ exit_nicely(); \
} while (0) } while (0)
#define PG_CMD_PUTLINE \ #define PG_CMD_PUTLINE \
do { \ do { \
if (fputs(*line, pg) < 0) \ if (fputs(*line, pg) < 0) \
exit_nicely(); \ exit_nicely(); \
fflush(pg); \ fflush(pg); \
} while (0) } while (0)
#ifndef WIN32 #ifndef WIN32
...@@ -862,6 +864,10 @@ find_postgres(char *path) ...@@ -862,6 +864,10 @@ find_postgres(char *path)
snprintf(cmd, sizeof(cmd), "\"%s/postgres\" -V 2>%s", path, DEVNULL); 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) if ((pgver = popen(cmd, "r")) == NULL)
return FIND_EXEC_ERR; return FIND_EXEC_ERR;
......
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