Re: SIGTERM does not stop backend postgres processes immediately

Поиск
Список
Период
Сортировка
От Fred Yankowski
Тема Re: SIGTERM does not stop backend postgres processes immediately
Дата
Msg-id 20010509094031.A87424@enteract.com
обсуждение исходный текст
Ответ на Re: SIGTERM does not stop backend postgres processes immediately  (Jason Tishler <Jason.Tishler@dothill.com>)
Ответы Re: SIGTERM does not stop backend postgres processes immediately  (Jason Tishler <Jason.Tishler@dothill.com>)
Список pgsql-cygwin
I just ran 'make check' for postgres and all 76 tests passed.

The problem I'm seeing, where a postgres backend process doesn't react
immediately to SIGTERM, occurs even when there is only one such
backend process, so this may be a different problem from the one
described in those earlier threads and recently fixed in CVS.

I'm seeing this problem as I test my patch for running postgres as an
NT service.  But I just tried running postmaster directly from the
shell and I see the same problem.

Here's a scenario.

    BASH WINDOW 1
    |    BASH WINDOW 2
    |    |    BASH WINDOW 3
    v    v    v

    postmaster -i -D /usr/local/pgsql/data.test/ -d 1
    ### database comes up to "production state"

        psql -h localhost template1
        ### starts up OK and prompts for a command

            ps -ef
            ### 2 postgres processes (one is actually the
            ### postmaster) and 1 psql process

            pg_ctl -D /usr/local/pgsql/data.test/ -m fast stop
            ### reports "waiting" and many dots

    ### "Fast Shutdown request" message appears

            ### times out and reports "failed"

[nothing more happens (which is the problem to be solved) until I do ...]

        \d
        ### [Any command to the backend would do.]
        ### "connection terminated" message appears

    ### "database system is shut down" appears.

            ps -ef
            ### the postgres processes are gone.


I know from inserting printfs into the backend code that the SIGTERM
signal handler function is not being called right after the stop
request.  Rather, it is called only after the backend gets some data
over its input socket connection, from that "\d" in did in pg_ctl in
this case.  It seems that the recv() call deep in the backend code
does not get interrupted by the SIGTERM.

On Tue, May 08, 2001 at 10:05:19PM -0400, Jason Tishler wrote:
> However, I have not built PostgreSQL with Cygwin 1.3.1 -- I have only run
> it against Cygwin 1.3.1.  What happens when you run make check?  Does the
> postmaster exit cleanly at the end of the regression test as expected?

I'm a little confused about the distinction you're making between
"Cygwin 1.3.1" and "Cygwin 1.3.1".  ;-)  Anyway, "make check"
completes without any errors.  No apparent hangs.

--
Fred Yankowski           fred@OntoSys.com      tel: +1.630.879.1312
Principal Consultant     www.OntoSys.com       fax: +1.630.879.1370
OntoSys, Inc             38W242 Deerpath Rd, Batavia, IL 60510, USA

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

Предыдущее
От: Jason Tishler
Дата:
Сообщение: Re: about why build again
Следующее
От: Jason Tishler
Дата:
Сообщение: Re: SIGTERM does not stop backend postgres processes immediately