]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
This fix solves problem with intense squelch noise when someone joins conf in bug...
authorSteve Murphy <murf@digium.com>
Wed, 25 Jul 2007 22:39:27 +0000 (22:39 +0000)
committerSteve Murphy <murf@digium.com>
Wed, 25 Jul 2007 22:39:27 +0000 (22:39 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@77191 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_meetme.c

index 8053196a235e1d54cece98bf1ba07e5d98f8e956..7e05b917d84fdcbaba9c332c7ca78d89dd4f01a6 100644 (file)
@@ -761,38 +761,44 @@ static struct ast_conference *build_conf(char *confno, char *pin, char *pinadmin
        ast_copy_string(cnf->confno, confno, sizeof(cnf->confno));
        ast_copy_string(cnf->pin, pin, sizeof(cnf->pin));
        ast_copy_string(cnf->pinadmin, pinadmin, sizeof(cnf->pinadmin));
+
+       /* Setup a new zap conference */
+       ztc.confno = -1;
+       ztc.confmode = ZT_CONF_CONFANN | ZT_CONF_CONFANNMON;
+       cnf->fd = open("/dev/zap/pseudo", O_RDWR);
+       if (cnf->fd < 0 || ioctl(cnf->fd, ZT_SETCONF, &ztc)) {
+               ast_log(LOG_WARNING, "Unable to open pseudo device\n");
+               if (cnf->fd >= 0)
+                       close(cnf->fd);
+               free(cnf);
+               cnf = NULL;
+               goto cnfout;
+       }
+
+       cnf->zapconf = ztc.confno;
+
+       /* Setup a new channel for playback of audio files */
        cnf->chan = ast_request("zap", AST_FORMAT_SLINEAR, "pseudo", NULL);
        if (cnf->chan) {
                ast_set_read_format(cnf->chan, AST_FORMAT_SLINEAR);
                ast_set_write_format(cnf->chan, AST_FORMAT_SLINEAR);
-               cnf->fd = cnf->chan->fds[0];    /* for use by conf_play() */
-       } else {
-               ast_log(LOG_WARNING, "Unable to open pseudo channel - trying device\n");
-               cnf->fd = open("/dev/zap/pseudo", O_RDWR);
-               if (cnf->fd < 0) {
-                       ast_log(LOG_WARNING, "Unable to open pseudo device\n");
+               ztc.chan = 0;
+               ztc.confno = cnf->zapconf;
+               ztc.confmode = ZT_CONF_CONFANN | ZT_CONF_CONFANNMON;
+               if (ioctl(cnf->chan->fds[0], ZT_SETCONF, &ztc)) {
+                       ast_log(LOG_WARNING, "Error setting conference\n");
+                       if (cnf->chan)
+                               ast_hangup(cnf->chan);
+                       else
+                               close(cnf->fd);
                        free(cnf);
                        cnf = NULL;
                        goto cnfout;
                }
        }
-       
-       /* Setup a new zap conference */
-       ztc.confno = -1;
-       ztc.confmode = ZT_CONF_CONFANN | ZT_CONF_CONFANNMON;
-       if (ioctl(cnf->fd, ZT_SETCONF, &ztc)) {
-               ast_log(LOG_WARNING, "Error setting conference\n");
-               if (cnf->chan)
-                       ast_hangup(cnf->chan);
-               else
-                       close(cnf->fd);
-               free(cnf);
-               cnf = NULL;
-               goto cnfout;
-       }
+
        /* Fill the conference struct */
        cnf->start = time(NULL);
-       cnf->zapconf = ztc.confno;
        cnf->isdynamic = dynamic ? 1 : 0;
        if (option_verbose > 2)
                ast_verbose(VERBOSE_PREFIX_3 "Created MeetMe conference %d for conference '%s'\n", cnf->zapconf, cnf->confno);