コード例 #1
0
job *get_recycled_job()

  {
  job *pjob;

  pthread_mutex_lock(recycler.rc_mutex);
  pjob = next_job_from_recycler(&recycler.rc_jobs,&recycler.rc_iter);

  if (pjob == NULL)
    recycler.rc_iter = -1;
  pthread_mutex_unlock(recycler.rc_mutex);

  if (pjob != NULL)
    pjob->ji_being_recycled = FALSE;

  return(pjob);
  } /* END get_recycled_job() */
コード例 #2
0
ファイル: job_recycler.c プロジェクト: hocks/torque
void *remove_some_recycle_jobs(
    
  void *vp)

  {
  int  i;
  all_jobs_iterator  *iter = NULL;
  job *pjob = NULL;

  pthread_mutex_lock(recycler.rc_mutex);

  recycler.rc_jobs.lock();
  iter = recycler.rc_jobs.get_iterator();
  recycler.rc_jobs.unlock();
  for (i = 0; i < JOBS_TO_REMOVE; i++)
    {
    pjob = next_job_from_recycler(&recycler.rc_jobs,iter);
    
    if (pjob == NULL)
      break;

    if (LOGLEVEL >= 10)
      log_event(PBSEVENT_JOB, PBS_EVENTCLASS_JOB, __func__, pjob->ji_qs.ji_jobid);

    pjob->ji_being_recycled = FALSE; //Need to set the being_recycled flag to false or
                                     //or remove_job won't remove it.
    remove_job(&recycler.rc_jobs, pjob);
    unlock_ji_mutex(pjob, __func__, "1", LOGLEVEL);
    free(pjob->ji_mutex);
    memset(pjob, 255, sizeof(job));
    free(pjob);
    }

  pthread_mutex_unlock(recycler.rc_mutex);

  if (iter != NULL)
   delete iter; 

  return(NULL);
  } /* END remove_some_recycle_jobs() */