Re: Windows: Wrong error message at connection termination

Поиск
Список
Период
Сортировка
От Thomas Munro
Тема Re: Windows: Wrong error message at connection termination
Дата
Msg-id CA+hUKGKjXEE-cZPt8QuR2y_8eATRaiNDbQ6MXQ0SrdFikw=8bw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Windows: Wrong error message at connection termination  (Thomas Munro <thomas.munro@gmail.com>)
Ответы Re: Windows: Wrong error message at connection termination  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On Mon, Nov 22, 2021 at 9:24 AM Thomas Munro <thomas.munro@gmail.com> wrote:
> Hmm.  Well, if I understand how this works (and I'm not too familiar
> with this Windows code so I maybe I don't), the postmaster duplicates
> the socket into the child process (see
> {write,read}_inheritable_socket()) and then closes its own handle (see
> ServerLoop()'s call to StreamClose(port->sock)).  What if the
> postmaster kept the socket open, and then closed its copy after the
> child exits?  Then, I guess, maybe, Winsock socket state would live on
> with a non-zero reference count and be able to perform the proper
> graceful TCP shutdown dance, at least as long as the postmaster itself
> is up.  Various other ideas: don't do that, but duplicate the socket
> back into the postmaster before exit, or into some other process, or
> rewrite PostgreSQL to use threads...

Hmm, maybe it's still not enough.  Now that I have coffee, I thought
about the well known failure of idle_in_transaction_timeout to report
errors on Windows[1].  There'd be no RST on timeout with the above
approach, which is good, but the next time you try to send a query,
perhaps a race begins: the server's TCP stack receives the query
packet and replies with RST (the "normal" kind that is a response to
unreceivable data, not the linger=0 kind that is proactively sent),
meanwhile the client begins to read, and *probably* reads the already
buffered idle-in-transaction-timeout error message, but with unlucky
scheduling the RST arrives first and drops the buffered data (unlike
on Unix), right?

[1] https://www.postgresql.org/message-id/CAP3o3PdzM0BLmNBELA5wV6YoN_1yYBVdoOvz9kYbOuK-YQGFAw%40mail.gmail.com



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Thomas Munro
Дата:
Сообщение: Re: Windows: Wrong error message at connection termination
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Windows: Wrong error message at connection termination