mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Add configure test to make sure fcntl(SETLK) is available,
and make backend/libpq/pqcomm.c only try to lock the socket file when the call exists. Also, change open-RDONLY to open-WRONLY; at least on my platform, you can't get a write lock on a file you didn't open for writing.
This commit is contained in:
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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
|
* If the socket exists but nobody has an advisory lock on it we
|
||||||
* can safely delete the file.
|
* 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;
|
struct flock lck;
|
||||||
|
|
||||||
@ -575,6 +576,7 @@ StreamServerPort(char *hostName, short portName, int *fdP)
|
|||||||
TPRINTF(TRACE_VERBOSE, "flock failed for %s", sock_path);
|
TPRINTF(TRACE_VERBOSE, "flock failed for %s", sock_path);
|
||||||
close(lock_fd);
|
close(lock_fd);
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_FCNTL_SETLK */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -609,7 +611,8 @@ StreamServerPort(char *hostName, short portName, int *fdP)
|
|||||||
* Open the socket file and get an advisory lock on it. The
|
* Open the socket file and get an advisory lock on it. The
|
||||||
* lock_fd is left open to keep the lock.
|
* 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;
|
struct flock lck;
|
||||||
|
|
||||||
@ -618,6 +621,7 @@ StreamServerPort(char *hostName, short portName, int *fdP)
|
|||||||
if (fcntl(lock_fd, F_SETLK, &lck) != 0)
|
if (fcntl(lock_fd, F_SETLK, &lck) != 0)
|
||||||
TPRINTF(TRACE_VERBOSE, "flock error for %s", sock_path);
|
TPRINTF(TRACE_VERBOSE, "flock error for %s", sock_path);
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_FCNTL_SETLK */
|
||||||
}
|
}
|
||||||
|
|
||||||
listen(fd, SOMAXCONN);
|
listen(fd, SOMAXCONN);
|
||||||
|
@ -526,6 +526,15 @@ AC_TRY_LINK([#include <sys/types.h>
|
|||||||
[AC_DEFINE(HAVE_UNION_SEMUN) AC_MSG_RESULT(yes)],
|
[AC_DEFINE(HAVE_UNION_SEMUN) AC_MSG_RESULT(yes)],
|
||||||
AC_MSG_RESULT(no))
|
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_MSG_CHECKING(for good DBL_MIN)
|
||||||
AC_TRY_RUN([#include <stdlib.h>
|
AC_TRY_RUN([#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@ -207,6 +207,9 @@ extern void srandom(int seed);
|
|||||||
/* Set to 1 if you have union semun */
|
/* Set to 1 if you have union semun */
|
||||||
#undef 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 */
|
/* Set to 1 if you want to USE_LOCALE */
|
||||||
#undef USE_LOCALE
|
#undef USE_LOCALE
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user