TFLAG_SWITCH = (1 << 9),
TFLAG_NOSIG = (1 << 10),
TFLAG_BYE = (1 << 11),
- TFLAG_CODEC = (1 << 12)
+ TFLAG_CODEC = (1 << 12),
+ TFLAG_HANGUP = (1 << 13)
} TFLAGS;
} else if (tech_pvt->spri) {
chanmap = tech_pvt->spri->private_info;
- switch_mutex_lock(chanmap->mutex);
- pri_hangup(tech_pvt->spri->pri, tech_pvt->call, switch_channel_get_cause(channel));
- pri_destroycall(tech_pvt->spri->pri, tech_pvt->call);
- switch_mutex_unlock(chanmap->mutex);
+ if (!switch_test_flag(tech_pvt, TFLAG_HANGUP)) {
+ switch_set_flag_locked(tech_pvt, TFLAG_HANGUP);
+ switch_mutex_lock(chanmap->mutex);
+ pri_hangup(tech_pvt->spri->pri, tech_pvt->call, switch_channel_get_cause(channel));
+ pri_destroycall(tech_pvt->spri->pri, tech_pvt->call);
+ switch_mutex_unlock(chanmap->mutex);
+ }
+
switch_mutex_lock(globals.channel_mutex);
*chanmap->map[tech_pvt->callno] = '\0';
}
tech_pvt->cause = pevent->hangup.cause;
+ switch_set_flag_locked(tech_pvt, TFLAG_HANGUP);
switch_channel_hangup(channel, tech_pvt->cause);
}
switch_core_session_rwunlock(session);