Index: asterisk/apps/app_queue.c =================================================================== RCS file: /usr/cvsroot/asterisk/apps/app_queue.c,v retrieving revision 1.85 diff -u -r1.85 app_queue.c --- asterisk/apps/app_queue.c 25 Sep 2004 14:22:27 -0000 1.85 +++ asterisk/apps/app_queue.c 27 Sep 2004 19:27:22 -0000 @@ -226,6 +226,7 @@ int wrapped; /* Round Robin - wrapped around? */ int joinempty; /* Do we care if the queue has no members? */ int eventwhencalled; /* Generate an event when the agent is called (before pickup) */ + int leavewhenempty; /* If all agents leave the queue, remove callers from the queue */ struct member *members; /* Member channels to be tried */ struct queue_ent *head; /* Start of the actual queue */ @@ -912,6 +913,12 @@ break; } + /* leave the queue if no agents, if enabled */ + if (!(qe->parent->members) && qe->parent->leavewhenempty) { + leave_queue(qe); + break; + } + /* Make a position announcement, if enabled */ if (qe->parent->announcefrequency && !ringing) say_position(qe); @@ -1626,7 +1633,7 @@ /* This is the wait loop for the head caller*/ /* To exit, they may get their call answered; */ /* they may dial a digit from the queue context; */ - /* or, they may may timeout. */ + /* or, they may timeout. */ /* Leave if we have exceeded our queuetimeout */ if (qe.queuetimeout && ( (time(NULL) - qe.start) >= qe.queuetimeout) ) { @@ -1634,6 +1641,12 @@ break; } + /* leave the queue if no agents, if enabled */ + if (!((qe.parent)->members) && (qe.parent)->leavewhenempty) { + leave_queue(&qe); + break; + } + /* Make a position announcement, if enabled */ if (qe.parent->announcefrequency && !ringing) say_position(&qe); @@ -1872,6 +1885,8 @@ } } else if (!strcasecmp(var->name, "joinempty")) { q->joinempty = ast_true(var->value); + } else if (!strcasecmp(var->name, "leavewhenempty")) { + q->leavewhenempty = ast_true(var->value); } else if (!strcasecmp(var->name, "eventwhencalled")) { q->eventwhencalled = ast_true(var->value); } else { Index: asterisk/configs/queues.conf.sample =================================================================== RCS file: /usr/cvsroot/asterisk/configs/queues.conf.sample,v retrieving revision 1.14 diff -u -r1.14 queues.conf.sample --- asterisk/configs/queues.conf.sample 26 Sep 2004 02:31:13 -0000 1.14 +++ asterisk/configs/queues.conf.sample 27 Sep 2004 19:27:22 -0000 @@ -113,6 +113,10 @@ ; ; joinempty = yes ; +; If you wish to remove callers from the queue if there are no agents present, set this to yes +; +; leavewhenempty = yes +; ; Asterisk can generate AgentCalled events when an agent is rung, if this is turned on ; (may generate a LOT of extra manager events) ;