Thread: BUG #17370: shmem lost on segfault

BUG #17370: shmem lost on segfault

From
PG Bug reporting form
Date:
The following bug has been logged on the website:

Bug reference:      17370
Logged by:          RekGRpth
Email address:      rekgrpth@gmail.com
PostgreSQL version: 14.1
Operating system:   docker alpine
Description:

In developing my https://github.com/RekGRpth/pg_task I found strange
behavior of shared memory segment.
I setup shared memory segment and give it to background worker, which I
start with default restart interval.
See
https://github.com/RekGRpth/pg_task/blob/d951723b6e556479f9a3fa960a6b3d1fb8f52164/conf.c#L67-L134
And everything works fine, even if background worker exits on error (if for
example I drop needed table task), then it restarts and can access to shared
memory segment.
See
https://github.com/RekGRpth/pg_task/blob/d951723b6e556479f9a3fa960a6b3d1fb8f52164/work.c#L742
But if third other process terminates by segmentation fault, my background
worker restarts fine but can not access to shared memory segment.
dsm_attach returns NULL
What I need to do to solve this problem?


Re: BUG #17370: shmem lost on segfault

From
Julien Rouhaud
Date:
Hi,

On Wed, Jan 19, 2022 at 03:05:56AM +0000, PG Bug reporting form wrote:
> The following bug has been logged on the website:
> 
> Bug reference:      17370
> Logged by:          RekGRpth
> Email address:      rekgrpth@gmail.com
> PostgreSQL version: 14.1
> Operating system:   docker alpine
> Description:        
> 
> In developing my https://github.com/RekGRpth/pg_task I found strange
> behavior of shared memory segment.

This is not a postgres bug.  If you need help with developing an extension you
should send a message to -hackers.

That being said, in case of unclean shutdown (which happens if a process
segfaults), the postmaster will restart and any shared memory will be lost, so
I'm assuming that you somehow serialize a handle which isn't valid anymore
after a restart, unclean or not.



Re: BUG #17370: shmem lost on segfault

From
RekGRpth
Date:
Ok, thanks.

What I should do in this case (postmaster restarts my background
worker and shared memory is lost)?
When I storage in bgw_extra field - everything is ok (with restarting
after segfault), but it size too small.

ср, 19 янв. 2022 г. в 14:28, Julien Rouhaud <rjuju123@gmail.com>:
>
> Hi,
>
> On Wed, Jan 19, 2022 at 03:05:56AM +0000, PG Bug reporting form wrote:
> > The following bug has been logged on the website:
> >
> > Bug reference:      17370
> > Logged by:          RekGRpth
> > Email address:      rekgrpth@gmail.com
> > PostgreSQL version: 14.1
> > Operating system:   docker alpine
> > Description:
> >
> > In developing my https://github.com/RekGRpth/pg_task I found strange
> > behavior of shared memory segment.
>
> This is not a postgres bug.  If you need help with developing an extension you
> should send a message to -hackers.
>
> That being said, in case of unclean shutdown (which happens if a process
> segfaults), the postmaster will restart and any shared memory will be lost, so
> I'm assuming that you somehow serialize a handle which isn't valid anymore
> after a restart, unclean or not.



Re: BUG #17370: shmem lost on segfault

From
Julien Rouhaud
Date:
Hi,

On Wed, Jan 19, 2022 at 02:34:13PM +0500, RekGRpth wrote:
> Ok, thanks.
> 
> What I should do in this case (postmaster restarts my background
> worker and shared memory is lost)?
> When I storage in bgw_extra field - everything is ok (with restarting
> after segfault), but it size too small.

I don't know, and as I said you should ask on -hackers, ideally with a good
description of how everything works or a minimal code to reproduce your
problem as it's not really clear right now.