Re: crash bug on closed connection
От | Jade Koskela |
---|---|
Тема | Re: crash bug on closed connection |
Дата | |
Msg-id | CAN5ZvqzAi67VOnSXGtownVY57w-XPJxeBA4Q+BWfPTJVmQPRQw@mail.gmail.com обсуждение исходный текст |
Ответ на | Fwd: crash bug on closed connection (Jade Koskela <jkoskela0@gmail.com>) |
Ответы |
Re: crash bug on closed connection
|
Список | pgsql-odbc |
Some of these steps might not be necessary. It might could be accomplished with a kill -9 on postgres. I tried running Postgres on Windows, and force killing it, but then the client always knew the connection was down.
When this occurs "in the wild", it is usually related to a timeout, so the fix that was checked in recently for setting tcpKeepAlive might be a workaround.
On Mon, Oct 13, 2014 at 4:44 PM, Jade Koskela <jkoskela0@gmail.com> wrote:
I have been looking into this crash for a while now, and I finally have a good repro.After digging through it with wireshark I observed thisclient tries to send a queryretransmit queryretransmit query...client sends TCP [RST],[ACK]Now it has crashed, so we restart it again and begin another connection successfully.It seems that the connection has dropped, but the client was never informed, and it doesn't handle this gracefully.I reproed it like this:On my mac running postgres server:Setup port forwarding to emulate a proxy or firewall problemssh -L [public ip]:5433:localhost:5432 -N localhostOn my windows machine:Connect to port 5433 on my macRun a queryOn my mac:Kill the ssh proxysighup postgresopen the ssh proxy againOn my windows machine:Run another query (machine still thinks connection is ok)Crash in psqlodbcw.dll> psqlodbc35w.dll!Exec_with_parameters_resolved(StatementClass_ * stmt=0x0a6f4fa0, int * exec_end=0x083bf3dc) Line 606 + 0x1b bytes Cpsqlodbc35w.dll!PGAPI_Execute(void * hstmt=0x0a6f4fa0, unsigned short flag=1) Line 1147 + 0xd bytes Cpsqlodbc35w.dll!SQLExecute(void * StatementHandle=0x0a6f4fa0) Line 386 + 0xe bytes Codbc32.dll!_SQLExecute@4() + 0x2c1 bytes> if (sscanf(cmd , "UPDATE %d", &count) == 1) // here cmd is junk but not null (0xddddddd)
В списке pgsql-odbc по дате отправления: