Merged revisions 67558 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Tue, 5 Jun 2007 23:02:11 +0000 (23:02 +0000)
committerRussell Bryant <russell@russellbryant.com>
Tue, 5 Jun 2007 23:02:11 +0000 (23:02 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r67558 | russell | 2007-06-05 18:01:44 -0500 (Tue, 05 Jun 2007) | 5 lines

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: https://origsvn.digium.com/svn/asterisk/trunk@67560 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_meetme.c

index 6e67650..91d5902 100644 (file)
@@ -827,8 +827,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");
@@ -845,6 +847,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;
        }
@@ -899,6 +902,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;
@@ -906,11 +910,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;
@@ -938,7 +943,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;