On Tue, Mar 14, 2023 at 11:20 AM Andres Freund <andres@anarazel.de> wrote:
> On windows it looks like pids can't be reused as long as there are handles for
> the process. Unfortunately, we close the handle for the process in
> pgwin32_deadchild_callback(), which runs in a separate thread, so the pid can
> be reused before we get to waitpid(). And thus it can happen while we start
> new children.
Ahhh. Right, of course. The handle thing makes total sense now that
you point it out, and although I couldn't find it in the fine manual,
a higher authority has it in black and white[1]. Even without knowing
which of those calls is releasing the process table entry, we're doing
all of them on the wrong side of that IOCP. Alright, here is a patch
to schlep most of that code over into waitpid(), where it belongs.
[1] https://devblogs.microsoft.com/oldnewthing/20110107-00/?p=11803