[dm-devel] [PATCH 43/57] multipathd: set uxsock_timeout after reconfiguration

Hannes Reinecke hare at suse.de
Wed Apr 27 11:10:44 UTC 2016


We should be setting the global variable 'uxsock_timeout' after
reconfiguration, not from within the uxsock_listen() function.

Signed-off-by: Hannes Reinecke <hare at suse.com>
---
 multipathd/main.c   |  5 +++++
 multipathd/main.h   |  1 +
 multipathd/uxlsnr.c | 15 ++++-----------
 3 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/multipathd/main.c b/multipathd/main.c
index c56672a..ebb9a50 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -34,6 +34,8 @@
 static int use_watchdog;
 #endif
 
+int uxsock_timeout;
+
 /*
  * libmultipath
  */
@@ -1700,6 +1702,7 @@ reconfigure (struct vectors * vecs)
 	} else {
 		conf = old;
 	}
+	uxsock_timeout = conf->uxsock_timeout;
 
 	running_state = DAEMON_RUNNING;
 
@@ -1933,6 +1936,8 @@ child (void * param)
 	if (load_config(DEFAULT_CONFIGFILE, udev))
 		goto failed;
 
+	uxsock_timeout = conf->uxsock_timeout;
+
 	dm_drv_version(conf->version, TGT_MPATH);
 	if (init_checkers()) {
 		condlog(0, "failed to initialize checkers");
diff --git a/multipathd/main.h b/multipathd/main.h
index 2f706d2..d1a6d71 100644
--- a/multipathd/main.h
+++ b/multipathd/main.h
@@ -15,6 +15,7 @@ struct prout_param_descriptor;
 struct prin_resp;
 
 extern pid_t daemon_pid;
+extern int uxsock_timeout;
 
 void exit_daemon(void);
 const char * daemon_status(void);
diff --git a/multipathd/uxlsnr.c b/multipathd/uxlsnr.c
index 77efa8a..9912e00 100644
--- a/multipathd/uxlsnr.c
+++ b/multipathd/uxlsnr.c
@@ -131,7 +131,7 @@ void uxsock_cleanup(void *arg)
 void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data)
 {
 	int ux_sock;
-	int rlen, timeout;
+	int rlen;
 	char *inbuf;
 	char *reply;
 	sigset_t mask;
@@ -164,14 +164,6 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data)
 		struct client *c, *tmp;
 		int i, poll_count, num_clients;
 
-		/*
-		 * Store configuration timeout;
-		 * configuration might change during
-		 * the call to 'reconfigure'.
-		 */
-		if (conf)
-			timeout = conf->uxsock_timeout;
-
 		/* setup for a poll */
 		pthread_mutex_lock(&client_lock);
 		num_clients = 0;
@@ -247,7 +239,8 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data)
 				}
 				if (gettimeofday(&start_time, NULL) != 0)
 					start_time.tv_sec = 0;
-				if (recv_packet(c->fd, &inbuf, timeout) != 0) {
+				if (recv_packet(c->fd, &inbuf,
+						uxsock_timeout) != 0) {
 					dead_client(c);
 					continue;
 				}
@@ -268,7 +261,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data)
 					reply = NULL;
 				}
 				check_timeout(start_time, inbuf,
-					      timeout);
+					      uxsock_timeout);
 				FREE(inbuf);
 			}
 		}
-- 
2.6.6




More information about the dm-devel mailing list