void *req_modifyjob( batch_request *preq) /* I */ { job *pjob; svrattrl *plist; char log_buf[LOCAL_LOG_BUF_SIZE]; pjob = chk_job_request(preq->rq_ind.rq_modify.rq_objname, preq); if (pjob == NULL) { return(NULL); } mutex_mgr job_mutex(pjob->ji_mutex, true); plist = (svrattrl *)GET_NEXT(preq->rq_ind.rq_modify.rq_attr); if (plist == NULL) { /* nothing to do */ reply_ack(preq); /* SUCCESS */ return(NULL); } job_mutex.unlock(); /* If async modify, reply now; otherwise reply is handled later */ if (preq->rq_type == PBS_BATCH_AsyModifyJob) { /* reply_ack will free preq. We need to copy it before we call reply_ack */ batch_request *new_preq; new_preq = duplicate_request(preq, -1); if (new_preq == NULL) { sprintf(log_buf, "failed to duplicate batch request"); log_event(PBSEVENT_JOB, PBS_EVENTCLASS_JOB, __func__, log_buf); return(NULL); } get_batch_request_id(new_preq); reply_ack(preq); new_preq->rq_noreply = TRUE; /* set for no more replies */ enqueue_threadpool_request((void *(*)(void *))modify_job_work, new_preq); } else modify_job_work(preq); return(NULL); } /* END req_modifyjob() */
void *req_modifyjob( batch_request *preq) /* I */ { job *pjob; svrattrl *plist; pjob = chk_job_request(preq->rq_ind.rq_modify.rq_objname, preq); if (pjob == NULL) { return(NULL); } mutex_mgr job_mutex(pjob->ji_mutex, true); plist = (svrattrl *)GET_NEXT(preq->rq_ind.rq_modify.rq_attr); if (plist == NULL) { /* nothing to do */ reply_ack(preq); /* SUCCESS */ return(NULL); } job_mutex.unlock(); /* If async modify, reply now; otherwise reply is handled later */ if (preq->rq_type == PBS_BATCH_AsyModifyJob) { reply_ack(preq); preq->rq_noreply = TRUE; /* set for no more replies */ enqueue_threadpool_request((void *(*)(void *))modify_job_work, preq); } else modify_job_work(preq); return(NULL); } /* END req_modifyjob() */