summaryrefslogtreecommitdiff
path: root/channels/chan_dahdi.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2010-06-09 17:06:41 +0000
committerRichard Mudgett <rmudgett@digium.com>2010-06-09 17:06:41 +0000
commit717570899c60a69368001ec276f69bab9a6f45c1 (patch)
tree55034207f040527910e6f42202acd99c8d0ee4e9 /channels/chan_dahdi.c
parent6c6260d4c7cbc38ff872eea390a2fd83d094c270 (diff)
Add missing API function to sig_ss7: sig_ss7_fixup().
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@269308 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_dahdi.c')
-rw-r--r--channels/chan_dahdi.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index d054323f5..5df6dae0c 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -7074,27 +7074,34 @@ static int dahdi_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
{
struct dahdi_pvt *p = newchan->tech_pvt;
int x;
+
ast_mutex_lock(&p->lock);
+
ast_debug(1, "New owner for channel %d is %s\n", p->channel, newchan->name);
if (p->owner == oldchan) {
p->owner = newchan;
}
- for (x = 0; x < 3; x++)
+ for (x = 0; x < 3; x++) {
if (p->subs[x].owner == oldchan) {
- if (!x)
+ if (!x) {
dahdi_unlink(NULL, p, 0);
+ }
p->subs[x].owner = newchan;
}
+ }
if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
analog_fixup(oldchan, newchan, p->sig_pvt);
- }
-#ifdef HAVE_PRI
- else if (dahdi_sig_pri_lib_handles(p->sig)) {
+#if defined(HAVE_PRI)
+ } else if (dahdi_sig_pri_lib_handles(p->sig)) {
sig_pri_fixup(oldchan, newchan, p->sig_pvt);
+#endif /* defined(HAVE_PRI) */
+#if defined(HAVE_SS7)
+ } else if (p->sig == SIG_SS7) {
+ sig_ss7_fixup(oldchan, newchan, p->sig_pvt);
+#endif /* defined(HAVE_SS7) */
}
-#endif
-
update_conf(p);
+
ast_mutex_unlock(&p->lock);
if (newchan->_state == AST_STATE_RINGING) {