From f3e067557d3728c1856f9ac6f5cf3431ba01a6ae Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Fri, 11 Nov 2005 21:48:34 +0000
Subject: [PATCH] Get srun reply agent working as pthread.

---
 src/srun/pmi.c | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/src/srun/pmi.c b/src/srun/pmi.c
index 864b47b5da2..2137a38a050 100644
--- a/src/srun/pmi.c
+++ b/src/srun/pmi.c
@@ -77,7 +77,7 @@ static void _print_kvs(void);
  * completely independent of this one. */
 static void _kvs_xmit_tasks(void)
 {
-	struct agent_arg args;
+	struct agent_arg *args;
 	pthread_attr_t attr;
 	pthread_t agent_id;
 
@@ -85,24 +85,20 @@ static void _kvs_xmit_tasks(void)
 	info("All tasks at barrier, transmit KVS keypairs now");
 #endif
 	/* copy the data */
-	args.barrier_xmit_ptr = barrier_ptr;
-	args.barrier_xmit_cnt = barrier_cnt;
+	args = xmalloc(sizeof(struct agent_arg));
+	args->barrier_xmit_ptr = barrier_ptr;
+	args->barrier_xmit_cnt = barrier_cnt;
 	barrier_ptr = NULL;
 	barrier_resp_cnt = 0;
 	barrier_cnt = 0;
-	args.kvs_xmit_ptr = _kvs_comm_dup();
-	args.kvs_xmit_cnt = kvs_comm_cnt;
+	args->kvs_xmit_ptr = _kvs_comm_dup();
+	args->kvs_xmit_cnt = kvs_comm_cnt;
 
 	/* Spawn a pthread to transmit it */
 	slurm_attr_init(&attr);
 	pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-#if 0
-/* FIXME: signaling problem if pthread */
-	if (pthread_create(&agent_id, &attr, _agent, (void *) &args))
+	if (pthread_create(&agent_id, &attr, _agent, (void *) args))
 		fatal("pthread_create");
-#else
-_agent((void *) &args);
-#endif
 }
 
 static void *_agent(void *x)
@@ -162,6 +158,7 @@ info("got reply, rc=%d @ %ld", rc, (long)time(NULL));
 		xfree(args->kvs_xmit_ptr[i]);
 	}
 	xfree(args->kvs_xmit_ptr);
+	xfree(args);
 	return NULL;
 }
 
-- 
GitLab