void free_br(struct batch_request *preq) { delete_link(&preq->rq_link); reply_free(&preq->rq_reply); if (preq->rq_parentbr) { /* * have a parent who has the original info, so we cannot * free any data malloc-ed outside of the basic structure; * decrement the reference count in the parent and when it * goes to zero, reply_send() it */ if (preq->rq_parentbr->rq_refct > 0) { if (--preq->rq_parentbr->rq_refct == 0) reply_send(preq->rq_parentbr); } if (preq->rppcmd_msgid) free(preq->rppcmd_msgid); (void)free(preq); return; } /* * IMPORTANT - free any data that is malloc-ed outside of the * basic batch_request structure below here so it is not freed * when a copy of the structure (for a Array subjob) is freed */ if (preq->rq_extend) (void)free(preq->rq_extend); switch (preq->rq_type) { case PBS_BATCH_QueueJob: free_attrlist(&preq->rq_ind.rq_queuejob.rq_attr); break; case PBS_BATCH_JobCred: if (preq->rq_ind.rq_jobcred.rq_data) (void)free(preq->rq_ind.rq_jobcred.rq_data); break; case PBS_BATCH_UserCred: if (preq->rq_ind.rq_usercred.rq_data) (void)free(preq->rq_ind.rq_usercred.rq_data); break; case PBS_BATCH_GSS_Context: if (preq->rq_ind.rq_gssdata.rq_data) free(preq->rq_ind.rq_gssdata.rq_data); break; case PBS_BATCH_jobscript: if (preq->rq_ind.rq_jobfile.rq_data) (void)free(preq->rq_ind.rq_jobfile.rq_data); break; case PBS_BATCH_CopyHookFile: if (preq->rq_ind.rq_hookfile.rq_data) (void)free(preq->rq_ind.rq_hookfile.rq_data); break; case PBS_BATCH_HoldJob: freebr_manage(&preq->rq_ind.rq_hold.rq_orig); break; case PBS_BATCH_MessJob: if (preq->rq_ind.rq_message.rq_text) (void)free(preq->rq_ind.rq_message.rq_text); break; case PBS_BATCH_RelnodesJob: if (preq->rq_ind.rq_relnodes.rq_node_list) (void)free(preq->rq_ind.rq_relnodes.rq_node_list); break; case PBS_BATCH_PySpawn: arrayfree(preq->rq_ind.rq_py_spawn.rq_argv); arrayfree(preq->rq_ind.rq_py_spawn.rq_envp); break; case PBS_BATCH_ModifyJob: case PBS_BATCH_ModifyResv: freebr_manage(&preq->rq_ind.rq_modify); break; case PBS_BATCH_RunJob: case PBS_BATCH_AsyrunJob: case PBS_BATCH_StageIn: case PBS_BATCH_ConfirmResv: if (preq->rq_ind.rq_run.rq_destin) (void)free(preq->rq_ind.rq_run.rq_destin); break; case PBS_BATCH_StatusJob: case PBS_BATCH_StatusQue: case PBS_BATCH_StatusNode: case PBS_BATCH_StatusSvr: case PBS_BATCH_StatusSched: case PBS_BATCH_StatusHook: case PBS_BATCH_StatusRsc: case PBS_BATCH_StatusResv: if (preq->rq_ind.rq_status.rq_id) free(preq->rq_ind.rq_status.rq_id); free_attrlist(&preq->rq_ind.rq_status.rq_attr); break; case PBS_BATCH_CopyFiles: case PBS_BATCH_DelFiles: freebr_cpyfile(&preq->rq_ind.rq_cpyfile); break; case PBS_BATCH_CopyFiles_Cred: case PBS_BATCH_DelFiles_Cred: freebr_cpyfile_cred(&preq->rq_ind.rq_cpyfile_cred); break; case PBS_BATCH_MvJobFile: if (preq->rq_ind.rq_jobfile.rq_data) free(preq->rq_ind.rq_jobfile.rq_data); break; #ifndef PBS_MOM /* Server Only */ case PBS_BATCH_SubmitResv: free_attrlist(&preq->rq_ind.rq_queuejob.rq_attr); break; case PBS_BATCH_Manager: freebr_manage(&preq->rq_ind.rq_manager); break; case PBS_BATCH_ReleaseJob: freebr_manage(&preq->rq_ind.rq_release); break; case PBS_BATCH_Rescq: case PBS_BATCH_ReserveResc: case PBS_BATCH_ReleaseResc: free_rescrq(&preq->rq_ind.rq_rescq); break; case PBS_BATCH_DefSchReply: free(preq->rq_ind.rq_defrpy.rq_id); free(preq->rq_ind.rq_defrpy.rq_txt); break; case PBS_BATCH_SelectJobs: case PBS_BATCH_SelStat: free_attrlist(&preq->rq_ind.rq_select.rq_selattr); free_attrlist(&preq->rq_ind.rq_select.rq_rtnattr); break; #endif /* PBS_MOM */ } if (preq->rppcmd_msgid) free(preq->rppcmd_msgid); (void)free(preq); }
void free_br( struct batch_request *preq) { delete_link(&preq->rq_link); reply_free(&preq->rq_reply); if (preq->rq_extend) free(preq->rq_extend); switch (preq->rq_type) { case PBS_BATCH_QueueJob: free_attrlist(&preq->rq_ind.rq_queuejob.rq_attr); break; case PBS_BATCH_JobCred: if (preq->rq_ind.rq_jobcred.rq_data) free(preq->rq_ind.rq_jobcred.rq_data); break; case PBS_BATCH_MvJobFile: case PBS_BATCH_jobscript: if (preq->rq_ind.rq_jobfile.rq_data) free(preq->rq_ind.rq_jobfile.rq_data); break; case PBS_BATCH_HoldJob: freebr_manage(&preq->rq_ind.rq_hold.rq_orig); break; case PBS_BATCH_CheckpointJob: freebr_manage(&preq->rq_ind.rq_manager); break; case PBS_BATCH_MessJob: if (preq->rq_ind.rq_message.rq_text) free(preq->rq_ind.rq_message.rq_text); break; case PBS_BATCH_ModifyJob: case PBS_BATCH_AsyModifyJob: freebr_manage(&preq->rq_ind.rq_modify); break; case PBS_BATCH_StatusJob: case PBS_BATCH_StatusQue: case PBS_BATCH_StatusNode: case PBS_BATCH_StatusSvr: /* DIAGTODO: handle PBS_BATCH_StatusDiag */ free_attrlist(&preq->rq_ind.rq_status.rq_attr); break; case PBS_BATCH_JobObit: free_attrlist(&preq->rq_ind.rq_jobobit.rq_attr); break; case PBS_BATCH_CopyFiles: case PBS_BATCH_DelFiles: freebr_cpyfile(&preq->rq_ind.rq_cpyfile); break; #ifndef PBS_MOM /* Server Only */ case PBS_BATCH_Manager: freebr_manage(&preq->rq_ind.rq_manager); break; case PBS_BATCH_ReleaseJob: freebr_manage(&preq->rq_ind.rq_release); break; case PBS_BATCH_Rescq: free_rescrq(&preq->rq_ind.rq_rescq); break; case PBS_BATCH_SelectJobs: case PBS_BATCH_SelStat: free_attrlist(&preq->rq_ind.rq_select); break; case PBS_BATCH_RunJob: case PBS_BATCH_AsyrunJob: if (preq->rq_ind.rq_run.rq_destin) free(preq->rq_ind.rq_run.rq_destin); break; #endif /* !PBS_MOM */ default: /* NO-OP */ break; } /* END switch (preq->rq_type) */ free(preq); return; } /* END free_br() */
void free_br( struct batch_request *preq) { if (preq->rq_id != NULL) { remove_batch_request(preq->rq_id); free(preq->rq_id); preq->rq_id = NULL; } reply_free(&preq->rq_reply); if (preq->rq_extend) { free(preq->rq_extend); preq->rq_extend = NULL; } switch (preq->rq_type) { case PBS_BATCH_QueueJob: free_attrlist(&preq->rq_ind.rq_queuejob.rq_attr); break; case PBS_BATCH_JobCred: if (preq->rq_ind.rq_jobcred.rq_data) { free(preq->rq_ind.rq_jobcred.rq_data); preq->rq_ind.rq_jobcred.rq_data = NULL; } break; case PBS_BATCH_MvJobFile: case PBS_BATCH_jobscript: if (preq->rq_ind.rq_jobfile.rq_data) { free(preq->rq_ind.rq_jobfile.rq_data); preq->rq_ind.rq_jobfile.rq_data = NULL; } break; case PBS_BATCH_HoldJob: freebr_manage(&preq->rq_ind.rq_hold.rq_orig); break; case PBS_BATCH_CheckpointJob: freebr_manage(&preq->rq_ind.rq_manager); break; case PBS_BATCH_MessJob: if (preq->rq_ind.rq_message.rq_text) { free(preq->rq_ind.rq_message.rq_text); preq->rq_ind.rq_message.rq_text = NULL; } break; case PBS_BATCH_ModifyJob: case PBS_BATCH_AsyModifyJob: freebr_manage(&preq->rq_ind.rq_modify); break; case PBS_BATCH_StatusJob: case PBS_BATCH_StatusQue: case PBS_BATCH_StatusNode: case PBS_BATCH_StatusSvr: /* DIAGTODO: handle PBS_BATCH_StatusDiag */ free_attrlist(&preq->rq_ind.rq_status.rq_attr); break; case PBS_BATCH_JobObit: free_attrlist(&preq->rq_ind.rq_jobobit.rq_attr); break; case PBS_BATCH_CopyFiles: case PBS_BATCH_DelFiles: freebr_cpyfile(&preq->rq_ind.rq_cpyfile); break; case PBS_BATCH_Manager: freebr_manage(&preq->rq_ind.rq_manager); break; case PBS_BATCH_ReleaseJob: freebr_manage(&preq->rq_ind.rq_release); break; case PBS_BATCH_Rescq: free_rescrq(&preq->rq_ind.rq_rescq); break; case PBS_BATCH_SelectJobs: case PBS_BATCH_SelStat: free_attrlist(&preq->rq_ind.rq_select); break; case PBS_BATCH_RunJob: case PBS_BATCH_AsyrunJob: if (preq->rq_ind.rq_run.rq_destin) { free(preq->rq_ind.rq_run.rq_destin); preq->rq_ind.rq_run.rq_destin = NULL; } break; default: /* NO-OP */ break; } /* END switch (preq->rq_type) */ free(preq); return; } /* END free_br() */
void free_br( batch_request *preq) { if (preq == NULL) return; delete_link(&preq->rq_link); reply_free(&preq->rq_reply); if (preq->rq_extend) free(preq->rq_extend); switch (preq->rq_type) { case PBS_BATCH_QueueJob: free_attrlist(&preq->rq_ind.rq_queuejob.rq_attr); break; case PBS_BATCH_JobCred: if (preq->rq_ind.rq_jobcred.rq_data) free(preq->rq_ind.rq_jobcred.rq_data); break; case PBS_BATCH_MvJobFile: case PBS_BATCH_jobscript: if (preq->rq_ind.rq_jobfile.rq_data) free(preq->rq_ind.rq_jobfile.rq_data); break; case PBS_BATCH_HoldJob: freebr_manage(&preq->rq_ind.rq_hold.rq_orig); break; case PBS_BATCH_CheckpointJob: freebr_manage(&preq->rq_ind.rq_manager); break; case PBS_BATCH_MessJob: if (preq->rq_ind.rq_message.rq_text) free(preq->rq_ind.rq_message.rq_text); break; case PBS_BATCH_ModifyJob: case PBS_BATCH_AsyModifyJob: freebr_manage(&preq->rq_ind.rq_modify); break; case PBS_BATCH_StatusJob: case PBS_BATCH_StatusQue: case PBS_BATCH_StatusNode: case PBS_BATCH_StatusSvr: /* DIAGTODO: handle PBS_BATCH_StatusDiag */ free_attrlist(&preq->rq_ind.rq_status.rq_attr); break; case PBS_BATCH_JobObit: free_attrlist(&preq->rq_ind.rq_jobobit.rq_attr); break; case PBS_BATCH_CopyFiles: case PBS_BATCH_DelFiles: freebr_cpyfile(&preq->rq_ind.rq_cpyfile); break; default: /* NO-OP */ break; } /* END switch (preq->rq_type) */ free(preq); return; } /* END free_br() */