diff --git a/src/common/forward.c b/src/common/forward.c index ff76698387aaa8d11d3f7303e24362c6d38bf358..349ee74ec189e0fce03215cee0039ff1f45b73eb 100644 --- a/src/common/forward.c +++ b/src/common/forward.c @@ -47,6 +47,7 @@ #endif /* WITH_PTHREADS */ #define MAX_RETRIES 3 +int _destroy_data_info_data(ret_data_info_t *ret_data_info); void *_forward_thread(void *arg) { @@ -188,6 +189,164 @@ cleanup: return (NULL); } +int _destroy_data_info_data(ret_data_info_t *ret_data_info) +{ + switch(ret_data_info->type) { + case REQUEST_RESOURCE_ALLOCATION: + slurm_free_job_desc_msg(ret_data_info->data); + break; + case REQUEST_BUILD_INFO: + slurm_free_last_update_msg(ret_data_info->data); + break; + case REQUEST_JOB_INFO: + slurm_free_job_info_request_msg(ret_data_info->data); + break; + case REQUEST_JOB_END_TIME: + slurm_free_old_job_alloc_msg(ret_data_info->data); + break; + case REQUEST_NODE_INFO: + slurm_free_node_info_request_msg(ret_data_info->data); + break; + case REQUEST_PARTITION_INFO: + slurm_free_part_info_request_msg(ret_data_info->data); + break; + case MESSAGE_EPILOG_COMPLETE: + slurm_free_epilog_complete_msg(ret_data_info->data); + break; + case REQUEST_CANCEL_JOB_STEP: + slurm_free_job_step_kill_msg(ret_data_info->data); + break; + case REQUEST_COMPLETE_JOB_ALLOCATION: + slurm_free_complete_job_allocation_msg(ret_data_info->data); + break; + case REQUEST_COMPLETE_BATCH_SCRIPT: + slurm_free_complete_batch_script_msg(ret_data_info->data); + break; + case REQUEST_JOB_STEP_CREATE: + slurm_free_job_step_create_request_msg(ret_data_info->data); + break; + case REQUEST_JOB_STEP_INFO: + slurm_free_job_step_info_request_msg(ret_data_info->data); + break; + case REQUEST_JOB_WILL_RUN: + slurm_free_job_desc_msg(ret_data_info->data); + break; + case MESSAGE_NODE_REGISTRATION_STATUS: + slurm_free_node_registration_status_msg(ret_data_info->data); + break; + case REQUEST_OLD_JOB_RESOURCE_ALLOCATION: + slurm_free_old_job_alloc_msg(ret_data_info->data); + break; + case REQUEST_PING: + /* No body to free */ + break; + case REQUEST_RECONFIGURE: + /* No body to free */ + break; + case REQUEST_CONTROL: + /* No body to free */ + break; + case REQUEST_SHUTDOWN: + slurm_free_shutdown_msg(ret_data_info->data); + break; + case REQUEST_SHUTDOWN_IMMEDIATE: + /* No body to free */ + break; + case REQUEST_SUBMIT_BATCH_JOB: + slurm_free_job_desc_msg(ret_data_info->data); + break; + case REQUEST_UPDATE_JOB: + slurm_free_job_desc_msg(ret_data_info->data); + break; + case REQUEST_UPDATE_NODE: + slurm_free_update_node_msg(ret_data_info->data); + break; + case REQUEST_UPDATE_PARTITION: + slurm_free_update_part_msg(ret_data_info->data); + break; + case REQUEST_DELETE_PARTITION: + slurm_free_delete_part_msg(ret_data_info->data); + break; + case REQUEST_NODE_REGISTRATION_STATUS: + slurm_free_node_registration_status_msg(ret_data_info->data); + break; + case REQUEST_CHECKPOINT: + slurm_free_checkpoint_msg(ret_data_info->data); + break; + case REQUEST_CHECKPOINT_COMP: + slurm_free_checkpoint_comp_msg(ret_data_info->data); + break; + case REQUEST_SUSPEND: + slurm_free_suspend_msg(ret_data_info->data); + break; + case REQUEST_JOB_READY: + slurm_free_job_id_msg(ret_data_info->data); + break; + case REQUEST_NODE_SELECT_INFO: + slurm_free_node_select_msg(ret_data_info->data); + break; + case REQUEST_STEP_COMPLETE: + slurm_free_step_complete_msg(ret_data_info->data); + break; + case MESSAGE_STAT_JOBACCT: + slurm_free_stat_jobacct_msg(ret_data_info->data); + break; + case REQUEST_BATCH_JOB_LAUNCH: + slurm_free_job_launch_msg(ret_data_info->data); + break; + case REQUEST_LAUNCH_TASKS: + slurm_free_launch_tasks_request_msg(ret_data_info->data); + break; + case REQUEST_SPAWN_TASK: + slurm_free_spawn_task_request_msg(ret_data_info->data); + break; + case REQUEST_SIGNAL_TASKS: + slurm_free_kill_tasks_msg(ret_data_info->data); + break; + case REQUEST_TERMINATE_TASKS: + slurm_free_kill_tasks_msg(ret_data_info->data); + break; + case REQUEST_KILL_TIMELIMIT: + slurm_free_timelimit_msg(ret_data_info->data); + break; + case REQUEST_REATTACH_TASKS: + slurm_free_reattach_tasks_request_msg(ret_data_info->data); + break; + case REQUEST_SIGNAL_JOB: + slurm_free_signal_job_msg(ret_data_info->data); + break; + case REQUEST_SUSPEND: + slurm_free_suspend_msg(ret_data_info->data); + break; + case REQUEST_TERMINATE_JOB: + slurm_free_kill_job_msg(ret_data_info->data); + break; + case REQUEST_UPDATE_JOB_TIME: + slurm_free_update_job_time_msg(ret_data_info->data); + break; + case REQUEST_JOB_ID: + slurm_free_job_id_request_msg(ret_data_info->data); + break; + case REQUEST_FILE_BCAST: + slurm_free_file_bcast_msg(ret_data_info->data); + break; + case REQUEST_STEP_COMPLETE: + slurm_free_step_complete_msg(ret_data_info->data); + break; + case MESSAGE_STAT_JOBACCT: + slurm_free_stat_jobacct_msg(ret_data_info->data); + break; + case RESPONSE_SLURM_RC: + slurm_free_return_code_msg(ret_data_info->data); + break; + default: + error("invalid RPC msg_type=%d", ret_data_info->msg_type); + slurm_send_rc_msg(msg, EINVAL); + break; + } + return SLURM_SUCCESS; +} + /* * forward_init - initilize forward structure * IN: forward - forward_t * - struct to store forward info @@ -467,6 +626,7 @@ void destroy_data_info(void *object) { ret_data_info_t *ret_data_info = (ret_data_info_t *)object; if(ret_data_info) { + _destroy_data_info_data(ret_data_info); xfree(ret_data_info->node_name); /* FIXME: needs to probably be something for all diff --git a/src/plugins/jobacct/aix/jobacct_aix.c b/src/plugins/jobacct/aix/jobacct_aix.c index cda3748098fe259875cbaee5ba00d67d0b9fe809..ef543410ad410a6b5a724c0c3b9bd75aa1f3e152 100644 --- a/src/plugins/jobacct/aix/jobacct_aix.c +++ b/src/plugins/jobacct/aix/jobacct_aix.c @@ -269,9 +269,6 @@ struct jobacctinfo *jobacct_p_stat_task(pid_t pid) struct jobacctinfo *jobacct_p_remove_task(pid_t pid) { -#ifdef HAVE_AIX - _get_process_data(); -#endif return common_remove_task(pid); } diff --git a/src/plugins/jobacct/linux/jobacct_linux.c b/src/plugins/jobacct/linux/jobacct_linux.c index 690c9c4111a8afa80639a290ac2e8b2aa755faa3..1de4f66cdcf4f32b986d994b6094f04140f570af 100644 --- a/src/plugins/jobacct/linux/jobacct_linux.c +++ b/src/plugins/jobacct/linux/jobacct_linux.c @@ -259,7 +259,6 @@ struct jobacctinfo *jobacct_p_stat_task(pid_t pid) struct jobacctinfo *jobacct_p_remove_task(pid_t pid) { - _get_process_data(); return common_remove_task(pid); } diff --git a/src/slurmd/slurmstepd/mgr.c b/src/slurmd/slurmstepd/mgr.c index d55ac89d4677b31bf8f890b3882a16d0090e8f81..4ecc314c52ff1f15627073e662ebe0c2d73e36fe 100644 --- a/src/slurmd/slurmstepd/mgr.c +++ b/src/slurmd/slurmstepd/mgr.c @@ -908,8 +908,6 @@ _fork_all_tasks(slurmd_job_t *job) (unsigned long) job->task[i]->gtid, (unsigned long) pid); - jobacct_g_add_task(pid, job->task[i]->gtid); - job->task[i]->pid = pid; if (i == 0) job->pgid = pid; @@ -945,6 +943,8 @@ _fork_all_tasks(slurmd_job_t *job) goto fail1; } + jobacct_g_add_task(job->task[i]->pid, job->task[i]->gtid); + if (spank_task_post_fork (job, i) < 0) { error ("spank task %d post-fork failed", i); return SLURM_ERROR;