Re: Postgres service stops when I kill client backend on Windows

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: Postgres service stops when I kill client backend on Windows
Дата
Msg-id 20151012124550.GW30738@alap3.anarazel.de
обсуждение исходный текст
Ответ на Re: Postgres service stops when I kill client backend on Windows  (Michael Paquier <michael.paquier@gmail.com>)
Ответы Re: Postgres service stops when I kill client backend on Windows  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On 2015-10-12 21:38:12 +0900, Michael Paquier wrote:
> >> It feels wrong to do this in syslogger.c - I mean it's not the only
> >> process that's not attached to shared memory. Sure, the others get
> >> killed, but nonetheless...
> >
> >
> > +1. It feels like we're setting our selves up for repeating this mistake at
> > some later time :)
> 
> Actually, doesn't this apply as well to the archiver and the pgstat
> collector?

As mentioned above? The difference is that the archiver et al get killed
by postmaster during a PANIC restart thus don't present the problem
discussed here.

> So perhaps we may want to do that in SubPostmasterMain with
> PGSharedMemoryDetach. See for example the attached as an idea (patch
> completely untested).

> +    /*
> +     * Close any existing shared memory segment as those processes do not
> +     * need to have an access to it. This state is inherited from the
> +     * postmaster whether they need it or not.
> +     */
> +    if (strcmp(argv[1], "--forkarch") == 0 ||
> +        strcmp(argv[1], "--forkcol") == 0 ||
> +        strcmp(argv[1], "--forklog") == 0)
> +        PGSharedMemoryDetach();
> +

Well, in those cases we won't have attached to shared memory, so I'm not
convinced that this is the right solution. In fact, won't this lead to
hitting the elog in
void
PGSharedMemoryDetach(void)
{if (UsedShmemSegAddr != NULL){    if (!UnmapViewOfFile(UsedShmemSegAddr))        elog(LOG, "could not unmap view of
sharedmemory: error code %lu", GetLastError());
 
    UsedShmemSegAddr = NULL;}
}
UsedShmemSegAddr will have been setup by read_backend_variables(), but
the process won't have anything mapped at this point?

Greetings,

Andres Freund



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

Предыдущее
От: Michael Paquier
Дата:
Сообщение: Re: Postgres service stops when I kill client backend on Windows
Следующее
От: Dmitry Vasilyev
Дата:
Сообщение: Re: Postgres service stops when I kill client backend on Windows