aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_meetme.c
diff options
context:
space:
mode:
authorqwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-12-12 21:22:58 +0000
committerqwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-12-12 21:22:58 +0000
commit44d836c02e144d11d7a69ef461f78102619db91e (patch)
tree0ae8bde98254a4218269a4baa59e6099423629d6 /apps/app_meetme.c
parent8a1ce32239018edfd9121702ab188fe5e8255e79 (diff)
Merged revisions 92617 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 (closes issue #11048) ........ r92617 | qwell | 2007-12-12 15:15:45 -0600 (Wed, 12 Dec 2007) | 4 lines Don't increment user count until after name has been recorded (if enabled). Issue 11048, tested by pep. ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@92618 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_meetme.c')
-rw-r--r--apps/app_meetme.c55
1 files changed, 32 insertions, 23 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 26a565f05..14e7c259d 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -1531,7 +1531,8 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
long time_left_ms = 0;
struct timeval nexteventts = { 0, };
int to;
-
+ int setusercount = 0;
+
if (!(user = ast_calloc(1, sizeof(*user))))
return ret;
@@ -1671,9 +1672,6 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
goto outrun;
}
- if (confflags & CONFFLAG_MARKEDUSER)
- conf->markedusers++;
-
ast_mutex_lock(&conf->playlock);
if (AST_LIST_EMPTY(&conf->userlist))
@@ -1695,12 +1693,33 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
user->userflags = confflags;
user->adminflags = (confflags & CONFFLAG_STARTMUTED) ? ADMINFLAG_SELFMUTED : 0;
user->talking = -1;
+
+ ast_mutex_unlock(&conf->playlock);
+
+ if (!(confflags & CONFFLAG_QUIET) && ((confflags & CONFFLAG_INTROUSER) || (confflags & CONFFLAG_INTROUSERNOREVIEW))) {
+ snprintf(user->namerecloc, sizeof(user->namerecloc),
+ "%s/meetme/meetme-username-%s-%d", ast_config_AST_SPOOL_DIR,
+ conf->confno, user->user_no);
+ if (confflags & CONFFLAG_INTROUSERNOREVIEW)
+ res = ast_play_and_record(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, 128, 0, NULL);
+ else
+ res = ast_record_review(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, NULL);
+ if (res == -1)
+ goto outrun;
+ }
+
+ ast_mutex_lock(&conf->playlock);
+
+ if (confflags & CONFFLAG_MARKEDUSER)
+ conf->markedusers++;
conf->users++;
if (rt_log_members) {
/* Update table */
snprintf(members, sizeof(members), "%d", conf->users);
ast_update_realtime("meetme", "confno", conf->confno, "members", members, NULL);
}
+ setusercount = 1;
+
/* This device changed state now - if this is the first user */
if (conf->users == 1)
ast_devstate_changed(AST_DEVICE_INUSE, "meetme:%s", conf->confno);
@@ -1719,18 +1738,6 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
ast_copy_string(exitcontext, chan->context, sizeof(exitcontext));
}
- if (!(confflags & CONFFLAG_QUIET) && ((confflags & CONFFLAG_INTROUSER) || (confflags & CONFFLAG_INTROUSERNOREVIEW))) {
- snprintf(user->namerecloc, sizeof(user->namerecloc),
- "%s/meetme/meetme-username-%s-%d", ast_config_AST_SPOOL_DIR,
- conf->confno, user->user_no);
- if (confflags & CONFFLAG_INTROUSERNOREVIEW)
- res = ast_play_and_record(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, 128, 0, NULL);
- else
- res = ast_record_review(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, NULL);
- if (res == -1)
- goto outrun;
- }
-
if ( !(confflags & (CONFFLAG_QUIET | CONFFLAG_NOONLYPERSON)) ) {
if (conf->users == 1 && !(confflags & CONFFLAG_WAITMARKED))
if (!ast_streamfile(chan, "conf-onlyperson", chan->language))
@@ -2647,14 +2654,16 @@ bailoutandtrynormal:
(long)(now.tv_sec - user->jointime));
}
- conf->users--;
- if (rt_log_members){
- /* Update table */
- snprintf(members, sizeof(members), "%d", conf->users);
- ast_update_realtime("meetme", "confno", conf->confno, "members", members, NULL);
+ if (setusercount) {
+ conf->users--;
+ if (rt_log_members){
+ /* Update table */
+ snprintf(members, sizeof(members), "%d", conf->users);
+ ast_update_realtime("meetme", "confno", conf->confno, "members", members, NULL);
+ }
+ if (confflags & CONFFLAG_MARKEDUSER)
+ conf->markedusers--;
}
- if (confflags & CONFFLAG_MARKEDUSER)
- conf->markedusers--;
/* Remove ourselves from the list */
AST_LIST_REMOVE(&conf->userlist, user, list);