mdtruncate leaking fd.c handles? - Mailing list pgsql-hackers

From Andres Freund
Subject mdtruncate leaking fd.c handles?
Date
Msg-id 20160908220748.oqh37ukwqqncbl3n@alap3.anarazel.de
Whole thread Raw
Responses Re: mdtruncate leaking fd.c handles?  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Hi,

Am I missing something or is md.c:mdtruncate() leaking open files?
The relevant piece of code is:
    if (priorblocks > nblocks)    {        /*         * This segment is no longer active (and has already been unlinked
       * from the mdfd_chain). We truncate the file, but do not delete         * it, for reasons explained in the
headercomments.         */        if (FileTruncate(v->mdfd_vfd, 0) < 0)            ereport(ERROR,
(errcode_for_file_access(),                    errmsg("could not truncate file \"%s\": %m",
FilePathName(v->mdfd_vfd))));
        if (!SmgrIsTemp(reln))            register_dirty_segment(reln, forknum, v);        v = v->mdfd_chain;
Assert(ov!= reln->md_fd[forknum]); /* we never drop the 1st                                             * segment */
   pfree(ov);    }
 

note that we're freeing the chain entry, which contains the mdfd_vfd,
without previously calling FileClose().

This only really matters for VACUUM truncate and ON COMMIT TRUNCATE temp
table truncation afaics.  But it seems like we should fix it everywhere
nonetheless.

Greetings,

Andres Freund



pgsql-hackers by date:

Previous
From: Lucas
Date:
Subject: Re: Preventing deadlock on parallel backup
Next
From: Tom Lane
Date:
Subject: Re: mdtruncate leaking fd.c handles?