• T
    Add code to InternalIpcMemoryCreate() to handle the case where shmget() · 5b6a6962
    Tom Lane 提交于
    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.
    5b6a6962
sysv_shmem.c 16.6 KB