mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
WL#4949, Remove use of LOCK_alarm by instead using SO_SNDTIME0/SO_RCVTIME0
This commit is contained in:
67
configure.in
67
configure.in
@@ -859,10 +859,73 @@ AC_CHECK_DECLS(MHA_MAPSIZE_VA,
|
||||
#include <sys/mman.h>
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
fi
|
||||
|
||||
dnl Use of ALARMs to wakeup on timeout on sockets
|
||||
dnl
|
||||
dnl This feature makes use of a mutex and is a scalability hog we
|
||||
dnl try to avoid using. However we need support for SO_SNDTIMEO and
|
||||
dnl SO_RCVTIMEO socket options for this to work. So we will check
|
||||
dnl if this feature is supported by a simple AC_RUN_IFELSE macro. However
|
||||
dnl on some OS's there is support for setting those variables but
|
||||
dnl they are silently ignored. For those OS's we will not attempt
|
||||
dnl o use SO_SNDTIMEO and SO_RCVTIMEO even if it is said to work.
|
||||
dnl See Bug#29093 for the problem with SO_SND/RCVTIMEO on HP/UX.
|
||||
dnl To use alarm is simple, simply avoid setting anything.
|
||||
|
||||
|
||||
AC_CACHE_CHECK([whether SO_SNDTIMEO and SO_RCVTIMEO work],
|
||||
[mysql_cv_socket_timeout],
|
||||
[AC_RUN_IFELSE(
|
||||
[AC_LANG_PROGRAM([[
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
]],[[
|
||||
int fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
struct timeval tv;
|
||||
int ret= 0;
|
||||
tv.tv_sec= 2;
|
||||
tv.tv_usec= 0;
|
||||
ret|= setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
|
||||
ret|= setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
|
||||
return !!ret;
|
||||
]])],
|
||||
[mysql_cv_socket_timeout=yes],
|
||||
[mysql_cv_socket_timeout=no],
|
||||
[mysql_cv_socket_timeout=no
|
||||
AC_MSG_WARN([Socket timeout options disabled due to cross-compiling])])
|
||||
])
|
||||
|
||||
use_alarm=yes
|
||||
|
||||
if test "$mysql_cv_socket_timeout" = yes; then
|
||||
case $SYSTEM_TYPE in
|
||||
dnl We trust the result from the following systems
|
||||
*solaris*) use_alarm=no ;;
|
||||
*freebsd*) use_alarm=no ;;
|
||||
*darwin*) use_alarm=no ;;
|
||||
*)
|
||||
dnl We trust the result from Linux also
|
||||
if test "$TARGET_LINUX" = "true"; then
|
||||
use_alarm=no
|
||||
fi
|
||||
dnl We trust no one else for the moment
|
||||
dnl (Windows is hardcoded to not use alarms)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(alarm,
|
||||
AS_HELP_STRING([--with-alarm], [Use alarm to implement socket timeout.]),
|
||||
[use_alarm=$withval], [])
|
||||
|
||||
AC_MSG_CHECKING(whether to use alarms to implement socket timeout)
|
||||
if test "$use_alarm" = no ; then
|
||||
AC_DEFINE([NO_ALARM], [1], [No need to use alarm for socket timeout])
|
||||
fi
|
||||
AC_MSG_RESULT($use_alarm)
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Check for TCP wrapper support
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
@@ -71,8 +71,10 @@
|
||||
|
||||
#if defined(__WIN__) || !defined(MYSQL_SERVER)
|
||||
/* The following is because alarms doesn't work on windows. */
|
||||
#ifndef NO_ALARM
|
||||
#define NO_ALARM
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef NO_ALARM
|
||||
#include "my_pthread.h"
|
||||
|
||||
Reference in New Issue
Block a user