• Tom Lane's avatar
    Add code to InternalIpcMemoryCreate() to handle the case where shmget() · 15416323
    Tom Lane authored
    returns EINVAL for an existing shared memory segment.  Although it's not
    terribly sensible, that behavior does meet the POSIX spec because EINVAL
    is the appropriate error code when the existing segment is smaller than the
    requested size, and the spec explicitly disclaims any particular ordering of
    error checks.  Moreover, it does in fact happen on OS X and probably other
    BSD-derived kernels.  (We were able to talk NetBSD into changing their code,
    but purging that behavior from the wild completely seems unlikely to happen.)
    We need to distinguish collision with a pre-existing segment from invalid size
    request in order to behave sensibly, so it's worth some extra code here to get
    it right.  Per report from Gavin Kistner and subsequent investigation.
    
    Back-patch to all supported versions, since any of them could get used
    with a kernel having the debatable behavior.
    15416323
sysv_shmem.c 16.6 KB