Heikki Linnakangas <hlinnakan...@vmware.com> writes: > Hmm, starting with 9.3, postmaster can not only create and append to the > end of file, it can also inject a line in the middle, shifting the > following lines forwards. In theory, if a new line is injected into the > middle of the file between fgets() calls, readfile() could read part of > the same line twice. Not sure what consequences that could have; pg_ctl > might try to connect to wrong address or socket directory.
Hm. IIRC, the postmaster is careful to write the whole thing in a single write() call, which in principle is atomic. Perhaps you're right that we'd better have pg_ctl read it in a single read() to ensure that it sees a consistent file state. Otherwise we're making assumptions about what sort of buffering underlies the stdio functions. > Then again, I don't think read/write on a > file is guaranteed to be atomic either, so I guess there's always the > theoretical possibility of a partial read. I think it is as long as the file is less than a bufferload. > This makes me a bit uncomfortable with the 9.3 change that > postmaster.pid file is no longer strictly append-only (commit c9b0cbe9). > Could we delay appending the socket directory and listen address > information to the file until we know both, and then append both in one > call after that? IIRC, there were compatibility reasons for doing it that way, so I'm disinclined to change it. regards, tom lane -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs