aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/libpq/pqcomm.c10
-rw-r--r--src/configure.in9
-rw-r--r--src/include/config.h.in3
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