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
if (debug_port == NULL)
return;
- /* Make the trace stream line-buffered */
- setvbuf(debug_port, NULL, _IOLBF, 0);
conn->Pfdebug = debug_port;
conn->traceFlags = 0;
}
/* 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);