job *next_job_from_back( struct all_jobs *aj, int *iter) { job *pjob; pthread_mutex_lock(aj->alljobs_mutex); pjob = (job *)next_thing_from_back(aj->ra,iter); if (pjob != NULL) lock_ji_mutex(pjob, __func__, NULL, LOGLEVEL); pthread_mutex_unlock(aj->alljobs_mutex); if (pjob != NULL) { if (pjob->ji_being_recycled == TRUE) { unlock_ji_mutex(pjob, __func__, "1", LOGLEVEL); pjob = next_job_from_back(aj,iter); } } return(pjob); } /* END next_job_from_back() */
resizable_array *sort_exec_hosts( resizable_array *exec_hosts, const char *mppnodes) { if(mppnodes == NULL) { return exec_hosts; } char *tmp = strdup(mppnodes); char *tmp_str = tmp; resizable_array *tmp_host_list = initialize_resizable_array(100); char *tok; int iter; host_req *pHr; while((tok = threadsafe_tokenizer(&tmp_str,",")) != NULL) { iter = -1; while((pHr = (host_req *)next_thing_from_back(exec_hosts,&iter)) != NULL) { if(strcmp(pHr->hostname,tok) == 0) { insert_thing(tmp_host_list,pHr); remove_thing(exec_hosts,pHr); break; } } } iter = -1; while((pHr = (host_req *)next_thing_from_back(exec_hosts,&iter)) != NULL) { insert_thing(tmp_host_list,pHr); } free_resizable_array(exec_hosts); free(tmp); return tmp_host_list; }
job *next_job_from_back( struct all_jobs *aj, int *iter) { job *pjob; if (aj == NULL) { log_err(PBSE_BAD_PARAMETER, __func__, "null input pointer to all_jobs struct"); return(NULL); } if (iter == NULL) { log_err(PBSE_BAD_PARAMETER, __func__, "null input iterator"); return(NULL); } pthread_mutex_lock(aj->alljobs_mutex); pjob = (job *)next_thing_from_back(aj->ra,iter); if (pjob != NULL) lock_ji_mutex(pjob, __func__, NULL, LOGLEVEL); pthread_mutex_unlock(aj->alljobs_mutex); if (pjob != NULL) { if (pjob->ji_being_recycled == TRUE) { unlock_ji_mutex(pjob, __func__, "1", LOGLEVEL); pjob = next_job_from_back(aj,iter); } } return(pjob); } /* END next_job_from_back() */