diff --git a/src/srun/pmi.c b/src/srun/pmi.c index 864b47b5da28d58de825366ee5810f46b2dd8c6e..2137a38a0508bf7813858e4ae1eca1a2c93f93ff 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; }