From: | Andres Freund <andres(at)2ndquadrant(dot)com> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | buffile.c resource owner breakage on segment extension |
Date: | 2013-11-01 18:31:07 |
Message-ID: | 20131101183107.GA3567@awork2.anarazel.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
The attached testcase demonstrates that it currently is possible that
buffile.c segments get created belonging to the wrong resource owner
leading to WARNINGs ala "temporary file leak: File %d still referenced",
ERRORs like "write failed", asserts and segfaults.
The problem is that while BufFileCreateTemp() callers like tuplestore
take care to use proper resource owners for it, they don't during
BufFileWrite()->BufFileDumpBuffer()->extendBufFile(). The last in that
chain creates a new tempfile which then gets owned by
CurrentResourceOwner. Which, like in the testcase, might a
subtransaction's one.
While not particularly nice, given the API, it seems best for buffile.c
to remember the resource owner used for the original segment and
temporarily set that during the extension.
Greetings,
Andres Freund
--
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
Attachment | Content-Type | Size |
---|---|---|
fix-buffile-extension-resowner.patch | text/x-patch | 1.5 KB |
leak_file.sql | text/plain | 738 bytes |
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2013-11-01 18:36:35 | Re: missing RelationCloseSmgr in FreeFakeRelcacheEntry? |
Previous Message | Hannu Krosing | 2013-11-01 18:13:49 | Re: Save Hash Indexes |