summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Ronstrom <mikael@mysql.com>2009-11-27 18:12:33 +0100
committerMikael Ronstrom <mikael@mysql.com>2009-11-27 18:12:33 +0100
commit2dcd7d7d7be13dd9c33ee3740872cdcdb56f0b89 (patch)
treec27b8791dd82f9fcf5cc5eb06cd025638758aeb3
parent4d58e7717edb6eca3f35f4979ee11b0b5983809a (diff)
parent8df0c15b36964eac2dfc259ad59fa692fbb63184 (diff)
downloadmariadb-git-2dcd7d7d7be13dd9c33ee3740872cdcdb56f0b89.tar.gz
Merged in WL#4949
-rw-r--r--configure.in64
-rw-r--r--sql/net_serv.cc2
2 files changed, 66 insertions, 0 deletions
diff --git a/configure.in b/configure.in
index 75f4e0ad4b3..468111b8e24 100644
--- a/configure.in
+++ b/configure.in
@@ -874,9 +874,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])
+ AC_DEFINE([SIGNAL_WITH_VIO_CLOSE], [1], [Need to use vio close for kill connection])
fi
+AC_MSG_RESULT($use_alarm)
#--------------------------------------------------------------------
# Check for TCP wrapper support
diff --git a/sql/net_serv.cc b/sql/net_serv.cc
index 5cf3597c638..d54ff1d2779 100644
--- a/sql/net_serv.cc
+++ b/sql/net_serv.cc
@@ -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"