Use unnamed POSIX semaphores on Cygwin.

Testing on CI showed that Cygwin's semctl() can fail with EAGAIN
(possibly due to resource limits in cygserver that could be tuned, not
examined).  Switch to so-called POSIX semaphores instead, which don't
seem to fail in that way (possibly due to a more direct implementation
using Windows semaphore primitives instead of talking to cygserver,
based on a cursory glance at the source).

Other known problems still prevent PostgreSQL from running on Cygwin
without random crashes, but this rarer problem was noticed while
testing.

Discussion: https://postgr.es/m/CA%2BhUKG%2BQ6DU4Ov9LrvUyDcF3oHS4KMRVSKmVGaeePq-kOyG9gA%40mail.gmail.com
This commit is contained in:
Thomas Munro 2023-01-06 10:09:02 +13:00
parent 39cffe95f2
commit f2857af485
2 changed files with 6 additions and 0 deletions

View File

@ -211,6 +211,7 @@ if host_system == 'aix'
memset_loop_limit = 0
elif host_system == 'cygwin'
sema_kind = 'unnamed_posix'
cppflags += '-D_GNU_SOURCE'
dlsuffix = '.dll'
mod_link_args_fmt = ['@0@']

View File

@ -1,5 +1,10 @@
# src/template/cygwin
# Prefer unnamed POSIX semaphores if available, unless user overrides choice
if test x"$PREFERRED_SEMAPHORES" = x"" ; then
PREFERRED_SEMAPHORES=UNNAMED_POSIX
fi
SRCH_LIB="/usr/local/lib"
# This is required for ppoll(2), and perhaps other things