From a024bcf9d058fef884eaf183f834e1eb3f35e60f Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Mon, 17 Jul 2006 22:06:31 +0000
Subject: [PATCH] svn merge -r8549:8592
 https://eris.llnl.gov/svn/slurm/branches/slurm-1.1

---
 NEWS                |  5 ++++-
 src/sacct/options.c |  8 ++++----
 src/sinfo/opts.c    |  3 +++
 src/squeue/opts.c   | 11 +++++++++++
 src/srun/allocate.c |  8 ++++++++
 src/srun/msg.c      |  5 ++---
 src/srun/msg.h      |  1 +
 7 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/NEWS b/NEWS
index 687ae9a190a..50b0b5f764e 100644
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,9 @@ documents those changes that are of interest to users and admins.
     the code)
  -- Added support for OSX build.
 
+* Changes in SLURM 1.1.5
+========================
+
 * Changes in SLURM 1.1.4
 ========================
  -- Improve error handling in hierarchical communications logic.
@@ -1762,7 +1765,7 @@ documents those changes that are of interest to users and admins.
  -- "fatal: _shm_unlock: Numerical result out of range" bug fixed in slurmd.
  -- Config file parsing is now case insensitive.
  -- SLURM_NODELIST environment variable now set in allocate mode.
-
+ 
 * Changes in SLURM 0.2.0-pre2
 =============================
 
diff --git a/src/sacct/options.c b/src/sacct/options.c
index 62916735930..5b0b8fbc9b2 100644
--- a/src/sacct/options.c
+++ b/src/sacct/options.c
@@ -1581,23 +1581,23 @@ void do_fdump(char* f[], int lc)
 			   "nvcsw",	 /* F_VCSW */
 			   "nivcsw",	 /* F_NIVCSW */
 			   "max_vsize",	 /* F_MAX_VSIZE */
-			   "max_vsize_node",	 /* F_MAX_VSIZE_NODE */
 			   "max_vsize_task",	 /* F_MAX_VSIZE_TASK */
 			   "ave_vsize",	 /* F_AVE_VSIZE */
 			   "max_rss",	 /* F_MAX_RSS */
-			   "max_rss_node",	 /* F_MAX_RSS_NODE */
 			   "max_rss_task",	 /* F_MAX_RSS_TASK */
 			   "ave_rss",	 /* F_AVE_RSS */
 			   "max_pages",	 /* F_MAX_PAGES */
-			   "max_pages_node",	 /* F_MAX_PAGES_NODE */
 			   "max_pages_task",	 /* F_MAX_PAGES_TASK */
 			   "ave_pages",	 /* F_AVE_PAGES */
 			   "min_cputime",	 /* F_MIN_CPU */
-			   "min_cputime_node",	 /* F_MIN_CPU_NODE */
 			   "min_cputime_task",	 /* F_MIN_CPU_TASK */
 			   "ave_cputime",	 /* F_AVE_RSS */
 			   "StepName",	 /* F_STEPNAME */
 			   "StepNodes",	 /* F_STEPNODES */
+			   "max_vsize_node",	 /* F_MAX_VSIZE_NODE */
+			   "max_rss_node",	 /* F_MAX_RSS_NODE */
+			   "max_pages_node",	 /* F_MAX_PAGES_NODE */
+			   "min_cputime_node",	 /* F_MIN_CPU_NODE */
 			   NULL};
        
 	char	*suspend[] = {"Suspend/Run time", /* F_TOT_ELAPSED */
diff --git a/src/sinfo/opts.c b/src/sinfo/opts.c
index a7002ee7f9b..38fb962ba46 100644
--- a/src/sinfo/opts.c
+++ b/src/sinfo/opts.c
@@ -146,6 +146,7 @@ extern void parse_command_line(int argc, char *argv[])
 			params.long_output = true;
 			break;
 		case (int) 'n':
+			xfree(params.nodes);
 			params.nodes= xstrdup(optarg);
 			/*
 			 * confirm valid nodelist entry
@@ -162,6 +163,7 @@ extern void parse_command_line(int argc, char *argv[])
 			params.node_flag = true;
 			break;
 		case (int) 'o':
+			xfree(params.format);
 			params.format = xstrdup(optarg);
 			break;
 		case (int) 'p':
@@ -182,6 +184,7 @@ extern void parse_command_line(int argc, char *argv[])
 			params.sort = xstrdup(optarg);
 			break;
 		case (int) 't':
+			xfree(params.states);
 			params.states = xstrdup(optarg);
 			if (!(params.state_list = _build_state_list(optarg))) {
 				error ("valid states: %s", _node_state_list ());
diff --git a/src/squeue/opts.c b/src/squeue/opts.c
index e043086b5a5..0ec463c8cf4 100644
--- a/src/squeue/opts.c
+++ b/src/squeue/opts.c
@@ -81,6 +81,7 @@ parse_command_line( int argc, char* argv[] )
 	char *env_val = NULL;
 	int opt_char;
 	int option_index;
+	hostlist_t host_list;
 	static struct option long_options[] = {
 		{"all",        no_argument,       0, 'a'},
 		{"noheader",   no_argument,       0, 'h'},
@@ -144,12 +145,20 @@ parse_command_line( int argc, char* argv[] )
 			case (int) 'n':
 				xfree(params.node);
 				params.node = xstrdup(optarg);
+				host_list = hostlist_create(params.node);
+				if (!host_list) {
+					error("'%s' invalid entry for --node",
+						optarg);
+					exit(1);
+				}
+				hostlist_destroy(host_list);
 				break;
 			case (int) 'o':
 				xfree(params.format);
 				params.format = xstrdup(optarg);
 				break;
 			case (int) 'p':
+				xfree(params.partitions);
 				params.partitions = xstrdup(optarg);
 				params.part_list = 
 					_build_part_list( params.partitions );
@@ -167,11 +176,13 @@ parse_command_line( int argc, char* argv[] )
 				params.sort = xstrdup(optarg);
 				break;
 			case (int) 't':
+				xfree(params.states);
 				params.states = xstrdup(optarg);
 				params.state_list = 
 					_build_state_list( params.states );
 				break;
 			case (int) 'u':
+				xfree(params.users);
 				params.users = xstrdup(optarg);
 				params.user_list = 
 					_build_user_list( params.users );
diff --git a/src/srun/allocate.c b/src/srun/allocate.c
index 380997a270c..a6806cc4417 100644
--- a/src/srun/allocate.c
+++ b/src/srun/allocate.c
@@ -334,6 +334,7 @@ _handle_msg(slurm_msg_t *msg, resource_allocation_response_msg_t **resp)
 	uid_t uid       = getuid();
 	uid_t slurm_uid = (uid_t) slurm_get_slurm_user_id();
 	int rc = 0;
+	srun_timeout_msg_t *to;
 
 	if ((req_uid != slurm_uid) && (req_uid != 0) && (req_uid != uid)) {
 		error ("Security violation, slurm message from uid %u",
@@ -353,6 +354,13 @@ _handle_msg(slurm_msg_t *msg, resource_allocation_response_msg_t **resp)
 			*resp = msg->data;
 			rc = 1;
 			break;
+		case SRUN_TIMEOUT:
+			debug2("timeout received");
+			to = msg->data;
+			timeout_handler(to->timeout);
+			slurm_send_rc_msg(msg, SLURM_SUCCESS);
+			slurm_free_srun_timeout_msg(msg->data);
+			break;
 		default:
 			error("received spurious message type: %d\n",
 				 msg->msg_type);
diff --git a/src/srun/msg.c b/src/srun/msg.c
index 7caaa82f2bd..2a6ace6fc46 100644
--- a/src/srun/msg.c
+++ b/src/srun/msg.c
@@ -91,7 +91,6 @@ static void 	_msg_thr_poll(srun_job_t *job);
 static void	_set_jfds_nonblocking(srun_job_t *job);
 static void     _print_pid_list(const char *host, int ntasks, 
 				uint32_t *pid, char *executable_name);
-static void     _timeout_handler(time_t timeout);
 static void     _node_fail_handler(char *nodelist, srun_job_t *job);
 
 #define _poll_set_rd(_pfd, _fd) do {    \
@@ -324,7 +323,7 @@ rwfail:
  * FIXME: How much lead time do we want for this message? Some jobs may 
  *	require tens of minutes to gracefully terminate.
  */
-static void _timeout_handler(time_t timeout)
+void timeout_handler(time_t timeout)
 {
 	static time_t last_timeout = 0;
 
@@ -840,7 +839,7 @@ _handle_msg(srun_job_t *job, slurm_msg_t *msg)
 	case SRUN_TIMEOUT:
 		verbose("timeout received");
 		to = msg->data;
-		_timeout_handler(to->timeout);
+		timeout_handler(to->timeout);
 		slurm_send_rc_msg(msg, SLURM_SUCCESS);
 		slurm_free_srun_timeout_msg(msg->data);
 		break;
diff --git a/src/srun/msg.h b/src/srun/msg.h
index 832e2c29d2c..4cd2661cd97 100644
--- a/src/srun/msg.h
+++ b/src/srun/msg.h
@@ -33,6 +33,7 @@
 void     *msg_thr(void *arg);
 int       msg_thr_create(srun_job_t *job);
 slurm_fd  slurmctld_msg_init(void);
+void      timeout_handler(time_t timeout);
 
 typedef struct slurmctld_communication_addr {
 	char *hostname;
-- 
GitLab