[asterisk-commits] file: trunk r59362 - in /trunk: ./
apps/app_meetme.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Thu Mar 29 10:42:48 MST 2007
Author: file
Date: Thu Mar 29 12:42:48 2007
New Revision: 59362
URL: http://svn.digium.com/view/asterisk?view=rev&rev=59362
Log:
Merged revisions 59361 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
................
r59361 | file | 2007-03-29 13:38:55 -0400 (Thu, 29 Mar 2007) | 10 lines
Merged revisions 59360 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2
........
r59360 | file | 2007-03-29 13:33:58 -0400 (Thu, 29 Mar 2007) | 2 lines
Keep a global array of variables indicating whether certain conference rooms are in use. This ensures that two people going into a new dynamic conference when the 'e' option is set don't go into the same conference room. (issue #8835 reported by eliel)
........
................
Modified:
trunk/ (props changed)
trunk/apps/app_meetme.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.
Modified: trunk/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_meetme.c?view=diff&rev=59362&r1=59361&r2=59362
==============================================================================
--- trunk/apps/app_meetme.c (original)
+++ trunk/apps/app_meetme.c Thu Mar 29 12:42:48 2007
@@ -330,6 +330,8 @@
static AST_LIST_HEAD_STATIC(confs, ast_conference);
+static unsigned int conf_map[1024] = {0, };
+
struct volume {
int desired; /*!< Desired volume adjustment */
int actual; /*!< Actual volume adjustment (for channels that can't adjust) */
@@ -720,6 +722,7 @@
{
struct ast_conference *cnf;
struct zt_confinfo ztc = { 0, };
+ int confno_int = 0;
AST_LIST_LOCK(&confs);
@@ -776,6 +779,10 @@
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Created MeetMe conference %d for conference '%s'\n", cnf->zapconf, cnf->confno);
AST_LIST_INSERT_HEAD(&confs, cnf, list);
+
+ /* Reserve conference number in map */
+ if ((sscanf(cnf->confno, "%d", &confno_int) == 1) && (confno_int >= 0 && confno_int < 1024))
+ conf_map[confno_int] = 1;
cnfout:
if (cnf)
@@ -1312,9 +1319,13 @@
static int dispose_conf(struct ast_conference *conf)
{
int res = 0;
+ int confno_int = 0;
AST_LIST_LOCK(&confs);
if (ast_atomic_dec_and_test(&conf->refcount)) {
+ /* Take the conference room number out of an inuse state */
+ if ((sscanf(conf->confno, "%d", &confno_int) == 1) && (confno_int >= 0 && confno_int < 1024))
+ conf_map[confno_int] = 0;
conf_free(conf);
res = 1;
}
@@ -2521,20 +2532,10 @@
if (retrycnt > 3)
allowretry = 0;
if (empty) {
- int i, map[1024] = { 0, };
+ int i;
struct ast_config *cfg;
struct ast_variable *var;
int confno_int;
-
- AST_LIST_LOCK(&confs);
- AST_LIST_TRAVERSE(&confs, cnf, list) {
- if (sscanf(cnf->confno, "%d", &confno_int) == 1) {
- /* Disqualify in use conference */
- if (confno_int >= 0 && confno_int < 1024)
- map[confno_int]++;
- }
- }
- AST_LIST_UNLOCK(&confs);
/* We only need to load the config file for static and empty_no_pin (otherwise we don't care) */
if ((empty_no_pin) || (!dynamic)) {
@@ -2547,13 +2548,6 @@
if (stringp) {
char *confno_tmp = strsep(&stringp, "|,");
int found = 0;
- if (sscanf(confno_tmp, "%d", &confno_int) == 1) {
- if ((confno_int >= 0) && (confno_int < 1024)) {
- if (stringp && empty_no_pin) {
- map[confno_int]++;
- }
- }
- }
if (!dynamic) {
/* For static: run through the list and see if this conference is empty */
AST_LIST_LOCK(&confs);
@@ -2588,12 +2582,15 @@
/* Select first conference number not in use */
if (ast_strlen_zero(confno) && dynamic) {
- for (i = 0; i < sizeof(map) / sizeof(map[0]); i++) {
- if (!map[i]) {
+ AST_LIST_LOCK(&confs);
+ for (i = 0; i < sizeof(conf_map) / sizeof(conf_map[0]); i++) {
+ if (!conf_map[i]) {
snprintf(confno, sizeof(confno), "%d", i);
+ conf_map[i] = 1;
break;
}
}
+ AST_LIST_UNLOCK(&confs);
}
/* Not found? */
More information about the asterisk-commits
mailing list