aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_meetme.c
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-06-05 23:01:44 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-06-05 23:01:44 +0000
commit6a47780e897dc6cbf559e6e9d93d1a94f2fee146 (patch)
treeb3a13384c8e0b367a6b71d47ca814ef2451ea756 /apps/app_meetme.c
parent6f3b1c60409793ddb17804110beab59d94c49866 (diff)
Fix some crashes related to the use of the "meetme" CLI command. The code for
this command was not locking the conference list at all. (issue #9351, reported by and patch submitted by Junk-Y, committed patch is different and by me) git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@67558 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_meetme.c')
-rw-r--r--apps/app_meetme.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 32db794c8..5cf3f4047 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -825,8 +825,10 @@ static int meetme_cmd(int fd, int argc, char **argv)
if (argc == 1) {
/* 'MeetMe': List all the conferences */
now = time(NULL);
+ AST_LIST_LOCK(&confs);
if (AST_LIST_EMPTY(&confs)) {
ast_cli(fd, "No active MeetMe conferences.\n");
+ AST_LIST_UNLOCK(&confs);
return RESULT_SUCCESS;
}
ast_cli(fd, header_format, "Conf Num", "Parties", "Marked", "Activity", "Creation");
@@ -843,6 +845,7 @@ static int meetme_cmd(int fd, int argc, char **argv)
total += cnf->users;
}
+ AST_LIST_UNLOCK(&confs);
ast_cli(fd, "* Total number of MeetMe users: %d\n", total);
return RESULT_SUCCESS;
}
@@ -897,6 +900,7 @@ static int meetme_cmd(int fd, int argc, char **argv)
return RESULT_SUCCESS;
}
/* Find the right conference */
+ AST_LIST_LOCK(&confs);
AST_LIST_TRAVERSE(&confs, cnf, list) {
if (strcmp(cnf->confno, argv[2]) == 0)
break;
@@ -904,11 +908,12 @@ static int meetme_cmd(int fd, int argc, char **argv)
if (!cnf) {
if ( !concise )
ast_cli(fd, "No such conference: %s.\n",argv[2]);
+ AST_LIST_UNLOCK(&confs);
return RESULT_SUCCESS;
}
/* Show all the users */
+ time(&now);
AST_LIST_TRAVERSE(&cnf->userlist, user, list) {
- now = time(NULL);
hr = (now - user->jointime) / 3600;
min = ((now - user->jointime) % 3600) / 60;
sec = (now - user->jointime) % 60;
@@ -936,7 +941,7 @@ static int meetme_cmd(int fd, int argc, char **argv)
}
if ( !concise )
ast_cli(fd,"%d users in that conference.\n",cnf->users);
-
+ AST_LIST_UNLOCK(&confs);
return RESULT_SUCCESS;
} else
return RESULT_SHOWUSAGE;