• Andres Freund's avatar
    Use a fd opened for read/write when syncing slots during startup, take 2. · a586cc4b
    Andres Freund authored
    Cribbing from dfbaed45:
        Some operating systems, including the reporter's windows, return EBADFD
        or similar when fsync() is invoked on a O_RDONLY file descriptor.
        Unfortunately RestoreSlotFromDisk() does exactly that; which causes
        failures after restarts in at least some scenarios.
    
        If you hit the bug the error message will be something like
        ERROR: could not fsync file "pg_replslot/$name/state": Bad file descriptor
    
        Simply use O_RDWR instead of O_RDONLY when opening the relevant file
        descriptor to fix the bug.
    
    Unfortunately this fix was undone in 82a5649f. Re-apply, and add a
    comment.
    
    Bug: 16039
    Reported-By: Hans Buschmann
    Author: Andres Freund
    Discussion: https://postgr.es/m/16039-196fc97cc05e141c@postgresql.org
    Backpatch: 12-, as 82a5649f
    a586cc4b
slot.c 42.9 KB