• Michael Paquier's avatar
    Tighten use of OpenTransientFile and CloseTransientFile · 82a5649f
    Michael Paquier authored
    This fixes two sets of issues related to the use of transient files in
    the backend:
    1) OpenTransientFile() has been used in some code paths with read-write
    flags while read-only is sufficient, so switch those calls to be
    read-only where necessary.  These have been reported by Joe Conway.
    2) When opening transient files, it is up to the caller to close the
    file descriptors opened.  In error code paths, CloseTransientFile() gets
    called to clean up things before issuing an error.  However in normal
    exit paths, a lot of callers of CloseTransientFile() never actually
    reported errors, which could leave a file descriptor open without
    knowing about it.  This is an issue I complained about a couple of
    times, but never had the courage to write and submit a patch, so here we
    go.
    
    Note that one frontend code path is impacted by this commit so as an
    error is issued when fetching control file data, making backend and
    frontend to be treated consistently.
    
    Reported-by: Joe Conway, Michael Paquier
    Author: Michael Paquier
    Reviewed-by: Álvaro Herrera, Georgios Kokolatos, Joe Conway
    Discussion: https://postgr.es/m/20190301023338.GD1348@paquier.xyz
    Discussion: https://postgr.es/m/c49b69ec-e2f7-ff33-4f17-0eaa4f2cef27@joeconway.com
    82a5649f
twophase.c 72 KB