コード例 #1
0
ファイル: worker.c プロジェクト: kiryu/kamailio
int add_dmq_job(struct sip_msg* msg, dmq_peer_t* peer) {
	int i, found_available = 0;
	dmq_job_t new_job = { 0 };
	dmq_worker_t* worker;
	new_job.f = peer->callback;
	new_job.msg = msg;
	new_job.orig_peer = peer;
	if(!num_workers) {
		LM_ERR("error in add_dmq_job: no workers spawned\n");
		return -1;
	}
	/* initialize the worker with the first one */
	worker = workers;
	/* search for an available worker, or, if not possible, for the least busy one */
	for(i = 0; i < num_workers; i++) {
		if(job_queue_size(workers[i].queue) == 0) {
			worker = &workers[i];
			found_available = 1;
			break;
		} else if(job_queue_size(workers[i].queue) < job_queue_size(worker->queue)) {
			worker = &workers[i];
		}
	}
	if(!found_available) {
		LM_DBG("no available worker found, passing job to the least busy one [%d %d]\n",
		       worker->pid, job_queue_size(worker->queue));
	}
	job_queue_push(worker->queue, &new_job);
	lock_release(&worker->lock);
	return 0;
}
コード例 #2
0
ファイル: epbssrv.c プロジェクト: bdyunmu/epbs
void *job_queue_push_thread(void *argv){
	job_queue_push();
	return NULL;
}//void