Hmm, maybe it will be correctly?
void worker_loop(int id)
{
dmq_worker_t* worker;
dmq_job_t* current_job;
peer_reponse_t peer_response;
int ret_value;
int not_parsed;
dmq_node_t *dmq_node = NULL;
worker = &workers[id];
for(;;) {
LM_DBG("dmq_worker [%d %d] getting lock\n", id, my_pid());
lock_get(&worker->lock);
LM_DBG("dmq_worker [%d %d] lock acquired\n", id, my_pid());
/* multiple lock_release calls might be performed, so remove
* from queue until empty */
do {
/* fill the response with 0's */
memset(&peer_response, 0, sizeof(peer_response));
current_job = job_queue_pop(worker->queue);
/* job_queue_pop might return NULL if queue is empty */
if(current_job) {
/* extract the from uri */
if (current_job->msg->from->parsed) {
not_parsed = 0;
} else {
not_parsed = 1;
}
if (parse_from_header(current_job->msg) < 0) {
LM_ERR("bad sip message or missing From hdr\n");
} else {
dmq_node = find_dmq_node_uri(node_list, &((struct
to_body*)current_job->msg->from->parsed)->uri);
}
ret_value = current_job->f(current_job->msg, &peer_response, dmq_node);
if(ret_value < 0) {
LM_ERR("running job failed\n");
continue;
}
/* add the body to the reply */
if(peer_response.body.s) {
if(set_reply_body(current_job->msg, &peer_response.body,
&peer_response.content_type) < 0) {
LM_ERR("error adding lumps\n");
continue;
}
}
/* send the reply */
if(slb.freply(current_job->msg, peer_response.resp_code,
&peer_response.reason) < 0)
{
LM_ERR("error sending reply\n");
}
/* if body given, free the lumps and free the body */
if(peer_response.body.s) {
del_nonshm_lump_rpl(¤t_job->msg->reply_lump);
pkg_free(peer_response.body.s);
}
if((current_job->msg->from->parsed)&&(not_parsed)){
free_to(current_job->msg->from->parsed);
}
LM_DBG("sent reply\n");
shm_free(current_job->msg);
shm_free(current_job);
worker->jobs_processed++;
}
} while(job_queue_size(worker->queue) > 0);
}
}
---
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/59#issuecomment-72451753