diff options
-rw-r--r-- | src/backend/libpq/pqcomm.c | 10 | ||||
-rw-r--r-- | src/configure.in | 9 | ||||
-rw-r--r-- | src/include/config.h.in | 3 |
3 files changed, 19 insertions, 3 deletions
diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index cab6289d9e0..74f14516e59 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.54 1998/09/10 04:07:59 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.55 1998/10/06 02:31:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -560,7 +560,8 @@ StreamServerPort(char *hostName, short portName, int *fdP) * If the socket exists but nobody has an advisory lock on it we * can safely delete the file. */ - if ((lock_fd = open(sock_path, O_RDONLY | O_NONBLOCK, 0666)) >= 0) +#ifdef HAVE_FCNTL_SETLK + if ((lock_fd = open(sock_path, O_WRONLY | O_NONBLOCK, 0666)) >= 0) { struct flock lck; @@ -575,6 +576,7 @@ StreamServerPort(char *hostName, short portName, int *fdP) TPRINTF(TRACE_VERBOSE, "flock failed for %s", sock_path); close(lock_fd); } +#endif /* HAVE_FCNTL_SETLK */ } else { @@ -609,7 +611,8 @@ StreamServerPort(char *hostName, short portName, int *fdP) * Open the socket file and get an advisory lock on it. The * lock_fd is left open to keep the lock. */ - if ((lock_fd = open(sock_path, O_RDONLY | O_NONBLOCK, 0666)) >= 0) +#ifdef HAVE_FCNTL_SETLK + if ((lock_fd = open(sock_path, O_WRONLY | O_NONBLOCK, 0666)) >= 0) { struct flock lck; @@ -618,6 +621,7 @@ StreamServerPort(char *hostName, short portName, int *fdP) if (fcntl(lock_fd, F_SETLK, &lck) != 0) TPRINTF(TRACE_VERBOSE, "flock error for %s", sock_path); } +#endif /* HAVE_FCNTL_SETLK */ } listen(fd, SOMAXCONN); diff --git a/src/configure.in b/src/configure.in index 1410d4c09f5..7b299662305 100644 --- a/src/configure.in +++ b/src/configure.in @@ -526,6 +526,15 @@ AC_TRY_LINK([#include <sys/types.h> [AC_DEFINE(HAVE_UNION_SEMUN) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no)) +AC_MSG_CHECKING(for fcntl(F_SETLK)) +AC_TRY_LINK([#include <fcntl.h>], + [struct flock lck; + lck.l_whence = SEEK_SET; lck.l_start = lck.l_len = 0; + lck.l_type = F_WRLCK; + fcntl(0, F_SETLK, &lck);], + [AC_DEFINE(HAVE_FCNTL_SETLK) AC_MSG_RESULT(yes)], + AC_MSG_RESULT(no)) + AC_MSG_CHECKING(for good DBL_MIN) AC_TRY_RUN([#include <stdlib.h> #include <math.h> diff --git a/src/include/config.h.in b/src/include/config.h.in index 44752346b51..10c415c3a34 100644 --- a/src/include/config.h.in +++ b/src/include/config.h.in @@ -207,6 +207,9 @@ extern void srandom(int seed); /* Set to 1 if you have union semun */ #undef HAVE_UNION_SEMUN +/* Set to 1 if you have F_SETLK option for fcntl() */ +#undef HAVE_FCNTL_SETLK + /* Set to 1 if you want to USE_LOCALE */ #undef USE_LOCALE |