aboutsummaryrefslogtreecommitdiffstats
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
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
-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;