static void _step_cleanup(slurmd_job_t *job, slurm_msg_t *msg, int rc) { if (job) { jobacct_gather_g_destroy(job->jobacct); if (!job->batch) job_destroy(job); } /* * The message cannot be freed until the jobstep is complete * because the job struct has pointers into the msg, such * as the switch jobinfo pointer. */ switch(msg->msg_type) { case REQUEST_BATCH_JOB_LAUNCH: slurm_free_job_launch_msg(msg->data); break; case REQUEST_LAUNCH_TASKS: slurm_free_launch_tasks_request_msg(msg->data); break; default: fatal("handle_launch_message: Unrecognized launch RPC"); break; } jobacct_gather_g_destroy(step_complete.jobacct); xfree(msg); }
/* _slurmctld_free_batch_job_launch_msg is a variant of * slurm_free_job_launch_msg because all environment variables currently * loaded in one xmalloc buffer (see get_job_env()), which is different * from how slurmd assembles the data from a message */ 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); } }