Re: get_controlfile() can leak fds in the backend

Fabien COELHO <coelho@cri.ensmp.fr>

From: Fabien COELHO <coelho@cri.ensmp.fr>
To: Andres Freund <andres@anarazel.de>
Cc: Michael Paquier <michael@paquier.xyz>, Postgres hackers <pgsql-hackers@lists.postgresql.org>, Joe Conway <mail@joeconway.com>
Date: 2019-02-28T08:54:48Z
Lists: pgsql-hackers
Hello Andres,

>> Note that my concern is not about the page size, but rather that as more
>> commands may change the cluster status by editing the control file, it would
>> be better that a postmaster does not start while a pg_rewind or enable
>> checksum or whatever is in progress, and currently there is a possible race
>> condition between the read and write that can induce an issue, at least
>> theoretically.
>
> Seems odd to bring this up in this thread, it really has nothing to do
> with the topic.

Indeed. I raised it here because it is in the same area of code and 
Michaël was looking at it.

> If we were to want to do more here, ISTM the right approach would use 
> the postmaster pid file, not the control file.

ISTM that this just means re-inventing a manual poor-featured 
race-condition-prone lock API around another file, which seems to be 
created more or less only by "pg_ctl", while some other commands use the 
control file (eg pg_rewind, AFAICS).

-- 
Fabien.

Commits

  1. Tighten use of OpenTransientFile and CloseTransientFile

  2. Make get_controlfile not leak file descriptors