Re: pgsql/src backend/tcop/postgres.c include/misc ... - Mailing list pgsql-committers

From Hiroshi Inoue
Subject Re: pgsql/src backend/tcop/postgres.c include/misc ...
Date
Msg-id 3C3925C6.32E831EF@tpf.co.jp
Whole thread Raw
In response to Re: pgsql/src backend/tcop/postgres.c include/misc ...  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
Responses Re: pgsql/src backend/tcop/postgres.c include/misc ...
List pgsql-committers
Tom Lane wrote:
>
> "Hiroshi Inoue" <Inoue@tpf.co.jp> writes:
>
> > Before 7.1 QueryCancel flag was checked at the points
> > CHECK_FOR_INTERRUPTS are currently placed.
> > But the QueryCancel flag had nothing to do with die
> > interrupts.
>
> Indeed, and before 7.1 killing a backend with SIGTERM at a random time
> was horribly dangerous.  I did a bunch of retail patching at one point:
>
> 2001-01-12 16:53  tgl
>
>         * src/: backend/access/heap/heapam.c,
>         backend/access/nbtree/nbtinsert.c, backend/access/nbtree/nbtpage.c,
>         backend/access/transam/xact.c, backend/access/transam/xlog.c,
>         backend/commands/sequence.c, backend/commands/vacuum.c,
>         backend/storage/buffer/bufmgr.c, backend/storage/file/fd.c,
>         backend/storage/ipc/spin.c, backend/storage/lmgr/proc.c,
>         backend/tcop/postgres.c, backend/utils/cache/temprel.c,
>         backend/utils/init/postinit.c, backend/utils/mmgr/aset.c,
>         include/access/xlog.h, include/utils/elog.h: Add more
>         critical-section calls: all code sections that hold spinlocks are
>         now critical sections, so as to ensure die() won't interrupt us
>         while we are munging shared-memory data structures.  Avoid insecure
>         intermediate states in some code that proc_exit will call, like
>         palloc/pfree.  Rename START/END_CRIT_CODE to
>         START/END_CRIT_SECTION, since that seems to be what people tend to
>         call them anyway, and make them be called with () like a function
>         call, in hopes of not confusing pg_indent.  I doubt that this is
>         sufficient to make SIGTERM safe anywhere; there's just too much
>         code that could get invoked during proc_exit().
>
> and then gave up and proposed the current scheme.

I think the much more significant change is the following
one not the above one. ImmediateInterruptOK flag was
introduced and the flag is set to false except when the
backends are idle. I must have checked and objected to
the change then.

regards,
Hiroshi Inoue


CVSROOT:    /home/projects/pgsql/cvsroot
Module name:    pgsql
Changes by:    tgl@hub.org    01/01/14 00:08:17

Modified files:
    src/backend/access/nbtree: nbtinsert.c
    src/backend/access/transam: xact.c xlog.c
    src/backend/bootstrap: bootstrap.c
    src/backend/commands: vacuum.c analyze.c copy.c
    src/backend/executor: execProcnode.c
    src/backend/storage/buffer: bufmgr.c s_lock.c
    src/backend/storage/ipc: ipc.c spin.c
    src/backend/storage/lmgr: lock.c proc.c
    src/backend/tcop: postgres.c
    src/backend/utils/error: elog.c
    src/backend/utils/init: globals.c
    src/include/access: xlog.h
    src/include    : miscadmin.h
    src/include/storage: proc.h ipc.h
    src/include/tcop: tcopprot.h
    src/include/utils: elog.h
    src/interfaces/ecpg/preproc: pgc.l

Log message:
    Restructure backend SIGINT/SIGTERM handling so that 'die' interrupts
    are treated more like 'cancel' interrupts: the signal handler sets a
    flag that is examined at well-defined spots, rather than trying to cope
    with an interrupt that might happen anywhere.  See pghackers discussion
    of 1/12/01.

pgsql-committers by date:

Previous
From: petere@postgresql.org
Date:
Subject: pgsql/ oc/src/sgml/biblio.sgml oc/src/sgml/dat ...
Next
From: Tom Lane
Date:
Subject: Re: pgsql/src backend/tcop/postgres.c include/misc ...