]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
ensure that after a channel is created, if it happened to be in 'channel alarm' state...
authorKevin P. Fleming <kpfleming@digium.com>
Wed, 23 Jul 2008 15:52:29 +0000 (15:52 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Wed, 23 Jul 2008 15:52:29 +0000 (15:52 +0000)
(closes issue #12160)
Reported by: tzafrir

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@132942 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_dahdi.c

index ddba8016e3825b14bf3b43e5f7447466a4236d52..93ead486c1a518469cc21cd2908648c3628cd189 100644 (file)
@@ -7586,12 +7586,25 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf,
                        ioctl(tmp->subs[SUB_REAL].dfd,DAHDI_SETTONEZONE,&tmp->tonezone);
 #ifdef HAVE_PRI
                        /* the dchannel is down so put the channel in alarm */
-                       if (tmp->pri && !pri_is_up(tmp->pri))
+                       if (tmp->pri && !pri_is_up(tmp->pri)) {
                                tmp->inalarm = 1;
+                       }
 #endif                         
                        if ((res = get_alarms(tmp)) != DAHDI_ALARM_NONE) {
                                tmp->inalarm = 1;
                                handle_alarms(tmp, res);
+                       } else {
+                               /* yes, this looks strange... the unknown_alarm flag is only used to
+                                  control whether an 'alarm cleared' message gets generated when we
+                                  get an indication that the channel is no longer in alarm status.
+                                  however, the channel *could* be in an alarm status that we aren't
+                                  aware of (since get_alarms() only reports span alarms, not channel
+                                  alarms). setting this flag will cause any potential 'alarm cleared'
+                                  message to be suppressed, but if a real alarm occurs before that
+                                  happens, this flag will get cleared by it and the situation will
+                                  be normal.
+                               */
+                               tmp->unknown_alarm = 1;
                        }
                }