changeset 3420:d1b0dfa6572b HEAD

Make MySQL connect abort in 10 seconds if it can't connect.
author Timo Sirainen <tss@iki.fi>
date Thu, 09 Jun 2005 21:31:43 +0300
parents b97914e7c941
children c624ffa9e6f0
files src/lib-sql/driver-mysql.c
diffstat 1 files changed, 11 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-sql/driver-mysql.c	Thu Jun 09 21:28:57 2005 +0300
+++ b/src/lib-sql/driver-mysql.c	Thu Jun 09 21:31:43 2005 +0300
@@ -6,10 +6,14 @@
 
 #ifdef HAVE_MYSQL
 #include <stdlib.h>
+#include <unistd.h>
 #include <time.h>
 #include <mysql.h>
 #include <errmsg.h>
 
+/* Abort connect() if it can't connect within this time. */
+#define MYSQL_CONNECT_FAILURE_TIMEOUT 10
+
 /* Minimum delay between reconnecting to same server */
 #define CONNECT_MIN_DELAY 1
 /* Maximum time to avoiding reconnecting to same server */
@@ -65,6 +69,7 @@
 	struct mysql_db *db = conn->db;
 	const char *unix_socket, *host;
 	time_t now;
+	int failed;
 
 	if (conn->connected)
 		return TRUE;
@@ -98,9 +103,12 @@
 #endif
 	}
 
-	if (mysql_real_connect(conn->mysql, host, db->user, db->password,
-			       db->dbname, db->port, unix_socket,
-			       db->client_flags) == NULL) {
+	alarm(MYSQL_CONNECT_FAILURE_TIMEOUT);
+	failed = mysql_real_connect(conn->mysql, host, db->user, db->password,
+				    db->dbname, db->port, unix_socket,
+				    db->client_flags) == NULL;
+	alarm(0);
+	if (failed) {
 		if (conn->connect_failure_count > 0) {
 			/* increase delay between reconnections to this
 			   server */