From 47e5bff3746ce0a9e343e6f776f5fcfa684a7b5a Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Tue, 21 Nov 2006 22:17:04 +0000
Subject: [PATCH] svn merge -r10247:10249
 https://eris.llnl.gov/svn/slurm/branches/slurm-1.1

---
 src/slurmctld/agent.c    | 1 +
 src/slurmctld/job_mgr.c  | 1 +
 src/slurmctld/proc_req.c | 8 ++++----
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/slurmctld/agent.c b/src/slurmctld/agent.c
index 8c7603831b3..b25af3a0be6 100644
--- a/src/slurmctld/agent.c
+++ b/src/slurmctld/agent.c
@@ -1257,6 +1257,7 @@ static void _slurmctld_free_batch_job_launch_msg(batch_job_launch_msg_t * msg)
 {
 	if (msg) {
 		if (msg->environment) {
+			xfree(msg->environment[0]);
 			xfree(msg->environment);
 		}
 		slurm_free_job_launch_msg(msg);
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 72b94db135a..628753528da 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -2120,6 +2120,7 @@ char *get_job_script(struct job_record *job_ptr)
  * OUT data - pointer to array of pointers to strings (e.g. env),
  *	must be xfreed when no longer needed
  * OUT size - number of elements in data
+ * NOTE: The output format of this must be identical with _xduparray2()
  */
 static void
 _read_data_array_from_file(char *file_name, char ***data, uint16_t * size)
diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c
index de46932205b..caa0c1fc56d 100644
--- a/src/slurmctld/proc_req.c
+++ b/src/slurmctld/proc_req.c
@@ -2249,7 +2249,8 @@ _xduparray(uint16_t size, char ** array)
 	return result;
 }
 
-/* like _xduparray(), but performs a single xmalloc() */
+/* Like _xduparray(), but performs two xmalloc().  The output format of this 
+ * must be identical to _read_data_array_from_file() */
 static char **
 _xduparray2(uint16_t size, char ** array) 
 {
@@ -2261,10 +2262,9 @@ _xduparray2(uint16_t size, char ** array)
 
 	for (i=0; i<size; i++)
 		len += (strlen(array[i]) + 1);
-	ptr = xmalloc(sizeof(char *) * size + len);
-	result = (char **) ptr;
+	ptr = xmalloc(len);
+	result = (char **) xmalloc(sizeof(char *) * size);
 
-	ptr += (sizeof(char *) * size);
 	for (i=0; i<size; i++) {
 		result[i] = ptr;
 		len = strlen(array[i]);
-- 
GitLab