Heikki Linnakangas <heikki.linnakangas@iki.fi> writes:
> Fix race condition in pg_ctl reading postmaster.pid.
> If postmaster changed postmaster.pid while pg_ctl was reading it, pg_ctl
> could overrun the buffer it allocated for the file. Fix by reading the
> whole file to memory with one read() call.
Maybe I'm just not awake enough, but that code doesn't look to me like
it does the right thing with a non-newline-terminated file. Doesn't it
drop the last character of the last line?
Given the way that pg_ctl uses the file, I think that the old logic of
"pretend the file ends with a newline" is wrong anyway. If we do manage
to see an intermediate state of the file, it would be better to not
return the last line at all than to return a truncated (a/k/a wrong)
value for that line. So I'd vote to rejigger the logic to ignore any
data after the last newline.
regards, tom lane