summaryrefslogtreecommitdiff
path: root/drivers/dahdi
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2010-08-10 22:08:02 +0000
committerShaun Ruffell <sruffell@digium.com>2010-08-10 22:08:02 +0000
commit047fae63cb695f6e94e4be1c0ad4ea74f1c395f6 (patch)
tree75f135ebbd7a8c8c97c2676f69854a40055fcd28 /drivers/dahdi
parenta5415efa64c0fbb0e50a1ea06d24ba7e36eccdda (diff)
dahdi: Fix oops when trying to dacs channels with a null dacs function.
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9120 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi')
-rw-r--r--drivers/dahdi/dahdi-base.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c
index d11029f..78f37c9 100644
--- a/drivers/dahdi/dahdi-base.c
+++ b/drivers/dahdi/dahdi-base.c
@@ -511,11 +511,14 @@ static inline void rotate_sums(void)
static int dahdi_chan_dacs(struct dahdi_chan *chan1, struct dahdi_chan *chan2)
{
if (chan2) {
- if (chan1->span && chan2->span &&
- (chan1->span->ops->dacs == chan2->span->ops->dacs))
+ if (chan1->span && chan2->span && chan1->span->ops->dacs &&
+ (chan1->span->ops->dacs == chan2->span->ops->dacs)) {
return chan1->span->ops->dacs(chan1, chan2);
- else
+ } else {
+ module_printk(KERN_ERR, "Unable cross connect '%s' "
+ "with '%s'\n", chan2->name, chan1->name);
return -ENOSYS;
+ }
} else {
if (chan1->span && chan1->span->ops->dacs)
return chan1->span->ops->dacs(chan1, NULL);
@@ -4309,9 +4312,10 @@ static int dahdi_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long da
/* Setup conference properly */
chans[ch.chan]->confmode = DAHDI_CONF_DIGITALMON;
chans[ch.chan]->confna = ch.idlebits;
- dahdi_chan_dacs(chans[ch.chan], chans[ch.idlebits]);
+ res = dahdi_chan_dacs(chans[ch.chan],
+ chans[ch.idlebits]);
} else {
- dahdi_chan_dacs(chans[ch.chan], NULL);
+ res = dahdi_chan_dacs(chans[ch.chan], NULL);
}
chans[ch.chan]->master = newmaster;
/* Note new slave if we are not our own master */