Module: sip-router Branch: master Commit: e6fa8ae004f5d487e1c64471bf282931e4b9e901 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=e6fa8ae0...
Author: Elena-Ramona Modroiu ramona@asipto.com Committer: Elena-Ramona Modroiu ramona@asipto.com Date: Mon Oct 11 12:20:24 2010 +0200
mqueue: return false if queue is empty
- return code -2 - reported by Alex Balashov
---
modules/mqueue/README | 11 +++++++---- modules/mqueue/doc/mqueue_admin.xml | 8 ++++++-- modules/mqueue/mqueue_api.c | 22 +++++++++++++--------- modules/mqueue/mqueue_mod.c | 7 +++++-- 4 files changed, 31 insertions(+), 17 deletions(-)
diff --git a/modules/mqueue/README b/modules/mqueue/README index 4c439a4..f876b2a 100644 --- a/modules/mqueue/README +++ b/modules/mqueue/README @@ -10,7 +10,7 @@ Elena-Ramona Modroiu
- Copyright � 2010 Elena-Ramona Modroiu (asipto.com) + Copyright © 2010 Elena-Ramona Modroiu (asipto.com) __________________________________________________________________
Table of Contents @@ -94,7 +94,7 @@ Chapter 1. Admin Guide
Definition of memory queue
- Default value is "none". + Default value is “none”.
Value must be a list of parameters: attr=value;... The attribute 'name' is mandatory, defining the name of the queue. Optional attribute 'size' @@ -128,8 +128,11 @@ mq_add("myq", "$rU", "call from $fU");
4.2. mq_fetch(queue)
- Take oldest item from que and fill $mqk(queue) and $mqv(queue) pseudo - variables. Return true on success. + Take oldest item from queue and fill $mqk(queue) and $mqv(queue) pseudo + variables. + + Return: true on success (1); false on failure (-1) or no item fetched + (-2).
Example 1.3. mq_fetch usage ... diff --git a/modules/mqueue/doc/mqueue_admin.xml b/modules/mqueue/doc/mqueue_admin.xml index e02ca38..d1b924a 100644 --- a/modules/mqueue/doc/mqueue_admin.xml +++ b/modules/mqueue/doc/mqueue_admin.xml @@ -118,8 +118,12 @@ mq_add("myq", "$rU", "call from $fU"); <function moreinfo="none">mq_fetch(queue)</function> </title> <para> - Take oldest item from que and fill $mqk(queue) and $mqv(queue) pseudo - variables. Return true on success. + Take oldest item from queue and fill $mqk(queue) and + $mqv(queue) pseudo variables. + </para> + <para> + Return: true on success (1); false on failure (-1) or + no item fetched (-2). </para> <example> <title><function>mq_fetch</function> usage</title> diff --git a/modules/mqueue/mqueue_api.c b/modules/mqueue/mqueue_api.c index f75f23a..6007ef0 100644 --- a/modules/mqueue/mqueue_api.c +++ b/modules/mqueue/mqueue_api.c @@ -254,17 +254,21 @@ int mq_head_fetch(str *name) return -1; lock_get(&mh->lock);
- if(mh->ifirst!=NULL) + if(mh->ifirst==NULL) { - mp->item = mh->ifirst; - mh->ifirst = mh->ifirst->next; - if(mh->ifirst==NULL) { - mh->ilast = NULL; - } else { - mh->ifirst->prev = NULL; - } - mh->csize--; + /* empty queue */ + lock_release(&mh->lock); + return -2; + } + + mp->item = mh->ifirst; + mh->ifirst = mh->ifirst->next; + if(mh->ifirst==NULL) { + mh->ilast = NULL; + } else { + mh->ifirst->prev = NULL; } + mh->csize--;
lock_release(&mh->lock); return 0; diff --git a/modules/mqueue/mqueue_mod.c b/modules/mqueue/mqueue_mod.c index 922f02e..5a74f58 100644 --- a/modules/mqueue/mqueue_mod.c +++ b/modules/mqueue/mqueue_mod.c @@ -109,8 +109,11 @@ static void mod_destroy(void)
static int w_mq_fetch(struct sip_msg* msg, char* mq, char* str2) { - if(mq_head_fetch((str*)mq)<0) - return -1; + int ret; + + ret = mq_head_fetch((str*)mq); + if(ret<0) + return ret; return 1; }