diff --git a/channels/chan_zap.c b/channels/chan_zap.c index 1ed2450359..6847eea06c 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -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) {