Re: [HACKERS] Parallel Hash take II - Mailing list pgsql-hackers
From | Thomas Munro |
---|---|
Subject | Re: [HACKERS] Parallel Hash take II |
Date | |
Msg-id | CAEepm=1Ugp7mNFX-YpSfWr0F_6QA4jzjtavauBcoAAZGd7_tPA@mail.gmail.com Whole thread Raw |
In response to | Re: [HACKERS] Parallel Hash take II (Robert Haas <robertmhaas@gmail.com>) |
List | pgsql-hackers |
On Wed, Nov 8, 2017 at 10:32 AM, Robert Haas <robertmhaas@gmail.com> wrote: > On Tue, Nov 7, 2017 at 4:01 PM, Andres Freund <andres@anarazel.de> wrote: >> diff --git a/src/backend/utils/resowner/resowner.c b/src/backend/utils/resowner/resowner.c >> index 4c35ccf65eb..8b91d5a6ebe 100644 >> --- a/src/backend/utils/resowner/resowner.c >> +++ b/src/backend/utils/resowner/resowner.c >> @@ -528,16 +528,6 @@ ResourceOwnerReleaseInternal(ResourceOwner owner, >> PrintRelCacheLeakWarning(res); >> RelationClose(res); >> } >> - >> - /* Ditto for dynamic shared memory segments */ >> - while (ResourceArrayGetAny(&(owner->dsmarr), &foundres)) >> - { >> - dsm_segment *res = (dsm_segment *) DatumGetPointer(foundres); >> - >> - if (isCommit) >> - PrintDSMLeakWarning(res); >> - dsm_detach(res); >> - } >> } >> else if (phase == RESOURCE_RELEASE_LOCKS) >> { >> @@ -654,6 +644,16 @@ ResourceOwnerReleaseInternal(ResourceOwner owner, >> PrintFileLeakWarning(res); >> FileClose(res); >> } >> + >> + /* Ditto for dynamic shared memory segments */ >> + while (ResourceArrayGetAny(&(owner->dsmarr), &foundres)) >> + { >> + dsm_segment *res = (dsm_segment *) DatumGetPointer(foundres); >> + >> + if (isCommit) >> + PrintDSMLeakWarning(res); >> + dsm_detach(res); >> + } >> } >> >> Is that entirely unproblematic? Are there any DSM callbacks that rely on >> locks still being held? Please split this part into a separate commit >> with such analysis. > > FWIW, I think this change is a really good idea (I recommended it to > Thomas at some stage, I think). Yeah, it was Robert's suggestion; I thought I needed *something* like this but was hesitant for the niggling reason that Andres mentions: what if someone somewhere (including code outside our source tree) depends on this ordering because of unlocking etc? At that time I thought that my clean-up logic wasn't going to work on Windows without this reordering, because we were potentially closing file handles after unlinking the files, and I was under the impression that Windows wouldn't like that. Since then I've learned that Windows does actually allow it, but only if all file handles were opened with the FILE_SHARE_DELETE flag. We always do that (see src/port/open.c), so in fact this change is probably not needed for my patch set (theory not tested). I will put it in a separate patch as requested by Andres, because it's generally a good idea anyway for the reasons that Robert explained (ie you probably always want to clean up memory last, since it might contain the meta-data/locks/control objects/whatever you'll need to clean up anything else). -- Thomas Munro http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
pgsql-hackers by date: