From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Robert Haas <robertmhaas(at)gmail(dot)com> |
Cc: | "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: on_exit_reset fails to clear DSM-related exit actions |
Date: | 2014-03-10 15:48:09 |
Message-ID: | 1665.1394466489@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Robert Haas <robertmhaas(at)gmail(dot)com> writes:
> On Fri, Mar 7, 2014 at 2:40 PM, Robert Haas <robertmhaas(at)gmail(dot)com> wrote:
>> Hmm. So the problematic sequence of events is where a postmaster
>> child forks, and then exits without exec-ing, perhaps because e.g.
>> exec fails?
> I've attempted a fix for this case. The attached patch makes
> test_shm_mq fork() a child process that calls on_exit_reset() and then
> exits. Without the fix I just pushed, this causes the tests to fail;
> with this fix, this does not cause the tests to fail.
> I'm not entirely sure that this is exactly right, but I think it's an
> improvement.
This looks generally sane to me, but I wonder whether you should also
teach PGSharedMemoryDetach() to physically detach from DSM segments
not just the main shmem seg. Or maybe better, adjust most of the
places that call on_exit_reset and then PGSharedMemoryDetach to also
make a detach-from-DSM call. It looks like both sysv_shmem.c and
win32_shmem.c have internal callers of PGSharedMemoryDetach, which
probably shouldn't affect DSM.
You could argue that that's unnecessary on the grounds that the postmaster
will never have any DSM segments attached, but I think it would be
good coding practice anyway. People who copy-and-paste those bits of
code into other places are not likely to think of adding DSM calls.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Tomonari Katsumata | 2014-03-10 15:55:39 | Re: Little confusing things about client_min_messages. |
Previous Message | Mike Blackwell | 2014-03-10 15:06:55 | Re: BUG #9518: temporary login failure - "missing pg_hba entry" |