Don't call out an FXO until at least 2 seconds after it was hungup.
authorMark Spencer <markster@digium.com>
Sat, 15 May 2004 22:50:51 +0000 (22:50 +0000)
committerMark Spencer <markster@digium.com>
Sat, 15 May 2004 22:50:51 +0000 (22:50 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2971 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_zap.c

index 1ed2450..6847eea 100755 (executable)
@@ -426,6 +426,7 @@ static struct zt_pvt {
        int channel;                            /* Channel Number */
        int span;                                       /* Span number */
        int dialing;
+       time_t guardtime;                       /* Must wait this much time before using for new call */
        int dialednone;
        int use_callerid;                       /* Whether or not to use caller id on this channel */
        int hidecallerid;
@@ -1973,6 +1974,13 @@ static int zt_hangup(struct ast_channel *ast)
                                        tone_zone_play_tone(p->subs[SUB_REAL].zfd, -1);
                        }
                        break;
+               case SIG_FXSGS:
+               case SIG_FXSLS:
+               case SIG_FXSKS:
+                       /* Make sure we're not made available for at least two seconds */
+                       time(&p->guardtime);
+                       p->guardtime += 2;
+                       break;
                default:
                        tone_zone_play_tone(p->subs[SUB_REAL].zfd, -1);
                }
@@ -5763,7 +5771,10 @@ static inline int available(struct zt_pvt *p, int channelmatch, int groupmatch)
                return 0;
        /* If do not distrub, definitely not */
        if (p->dnd)
-               return 0;       
+               return 0;
+       /* If guard time, definitely not */
+       if (time(NULL) < p->guardtime)
+               return 0;
                
        /* If no owner definitely available */
        if (!p->owner) {