Re: Snapshot leak warning with lo_export in subtransaction

From: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: Pg Bugs <pgsql-bugs(at)postgresql(dot)org>, Andrew B <pgsql(dot)20(dot)drkshadow(at)spamgourmet(dot)com>
Subject: Re: Snapshot leak warning with lo_export in subtransaction
Date: 2021-10-18 09:59:56
Message-ID: f698e989-df50-9e4e-d7c3-3c05ebe56ddd@iki.fi
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On 27/09/2021 15:33, Alvaro Herrera wrote:
> On 2021-Sep-27, Heikki Linnakangas wrote:
>
>> This should be backpatched to all supported versions. This adds an argument
>> to 'inv_open' function, but I don't think there are extensions that use the
>> inv_*() functions directly. inv_api.c relies on close_lo_relation() being
>> called at the end of transaction, so I think an extension would find it hard
>> to use those functions correctly, anyway.
>
> Hmm, but you could also use a new value in its existing 'flags' argument
> instead of changing ABI.

I tried that, but didn't like the result. It conflated the user-visible
INV_READ/WRITE flags with the new internal-only flag.

Thinking about this some more, I came up with the attached. It moves the
responsibility of registering the snapshot from inv_api.c to the caller.
With that change, there's no need for a new option to inv_open(). The
division of labor between be-fsstubs.c and inv_api.c has always been a
bit blurry, I think that this makes it slightly more clear.

With this change, if there is an existing extension out there that calls
inv_open(), the returned desc will be short-lived. As I said above, I
think that's a reasonable assumption because dealing with a long-lived
LO desc correctly would require the caller to jump through some hoops
even before this change.

- Heikki

Attachment Content-Type Size
v2-0001-Fix-snapshot-reference-leak-if-lo_export-fails.patch text/x-patch 13.0 KB

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message PG Bug reporting form 2021-10-18 11:09:09 BUG #17235: PQsendQuery (with two sql) after PQenterPipelineMode cause ERROR
Previous Message Michael Paquier 2021-10-18 07:46:40 Re: BUG #17220: ALTER INDEX ALTER COLUMN SET (..) with an optionless opclass makes index and table unusable