libpq, threads and connection reset

Поиск
Список
Период
Сортировка
От Joe Murphy
Тема libpq, threads and connection reset
Дата
Msg-id 3D7751B5.CE431206@aersoft.com
обсуждение исходный текст
Ответ на  ("cheng" <ch_gang304@163.net>)
Список pgsql-interfaces
I'm having some problems with a multi-threaded application using libpq:

Some details:
OS: Solaris 2.6
Postgres version 7.2.1

When my application starts up the main thread (1) connects using
PQsetdbLogin() which is successful
Another thread (5 for example) issues queries over this connection.

My test is stopping postgres (KILL -INT) and testing if my application
detects the backend failure and
tries to re-connect.

Thread 5 issues a PQexec and discovers the error upon which thread 5
tries to reconnect (after calling PQfinish)
This reconnection HANGS, here is a stack trace:
    ee037438 poll     (ed906e48, 1, ffffffff)    ee04cc74 select   (ed906e50, ed908ea8, ed908f28, ed908eac,
ed908f2c, 4) + 280    ee69e010 pqWait   (0, 1, 485e8, 1, 81010100, ee0882cc) + 1d8    ee695178 connectDBComplete
(485e8,0, ee0a3180, 0, efffebc0,
 
ee086858) + f8    ee69484c PQsetdbLogin (45e28, ed9091a2, 0, 0, 45d68, 45e40) + 558

All access using the connection is serialized using a mutex.

I've tried the same test but with everything running in thread 1 and it
works OK.

I've managed to spot some differences between the two tests:

Multi Threaded test:
The re-connect underlying call to connect returns -1 and sets errno to
146 (connection refused)

Single Threaded test:
The re-connect underlying call to connect returns -1 and errno = 0, so
it thinks the connection is "in progress" and tries
to complete the connection - but hangs on the select (poll)


Any help or ideas greatly appreciated,

Joe


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

Предыдущее
От: "Iavor Raytchev"
Дата:
Сообщение: Re: the current 'schema' tab - renaming ideas
Следующее
От: Joe Murphy
Дата:
Сообщение: Re: libpq, threads and connection reset