]> granicus.if.org Git - postgresql/commitdiff
Add fflush() before popen() calls; avoids any possible problem with
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 14 Nov 2003 17:30:41 +0000 (17:30 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 14 Nov 2003 17:30:41 +0000 (17:30 +0000)
double or out-of-sequence output with child process.

src/bin/initdb/initdb.c

index 9762a856ff5fb587a90c8152fba6b870048d969e..9de258f88ae812f3b89209fb81de9ef66d54718e 100644 (file)
@@ -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;