Remove setvbuf() call from PQtrace()
authorAlvaro Herrera <[email protected]>
Wed, 31 Mar 2021 23:11:51 +0000 (20:11 -0300)
committerAlvaro Herrera <[email protected]>
Wed, 31 Mar 2021 23:11:51 +0000 (20:11 -0300)
It's misplaced there -- it's not libpq's output stream to tweak in that
way.  In particular, POSIX says that it has to be called before any
other operation on the file, so if a stream previously used by the
calling application, bad things may happen.

Put setvbuf() in libpq_pipeline for good measure.

Also, reduce fopen(..., "w+") to just fopen(..., "w") in
libpq_pipeline.c.  It's not clear that this fixes anything, but we don't
use w+ anywhere.

Per complaints from Tom Lane.

Discussion: https://postgr.es/m/3337422.1617229905@sss.pgh.pa.us

src/interfaces/libpq/fe-trace.c
src/test/modules/libpq_pipeline/libpq_pipeline.c

index ca59c183182bfd6e087dff502fcf409d44e6935a..9a4595f5c874cd1e9b9b6953e2d424387c9e4f24 100644 (file)
@@ -40,8 +40,6 @@ PQtrace(PGconn *conn, FILE *debug_port)
    if (debug_port == NULL)
        return;
 
-   /* Make the trace stream line-buffered */
-   setvbuf(debug_port, NULL, _IOLBF, 0);
    conn->Pfdebug = debug_port;
    conn->traceFlags = 0;
 }
index 081a84f8248dca9e2e3f1681fb5581079245df66..7aa7866265367ad5ff61a23c81d6bad657b07937 100644 (file)
@@ -1319,10 +1319,13 @@ main(int argc, char **argv)
    /* Set the trace file, if requested */
    if (tracefile != NULL)
    {
-       trace = fopen(tracefile, "w+");
-
+       trace = fopen(tracefile, "w");
        if (trace == NULL)
            pg_fatal("could not open file \"%s\": %m", tracefile);
+
+       /* Make it line-buffered */
+       setvbuf(trace, NULL, _IOLBF, 0);
+
        PQtrace(conn, trace);
        PQtraceSetFlags(conn,
                        PQTRACE_SUPPRESS_TIMESTAMPS | PQTRACE_REGRESS_MODE);