diff options
author | Shaun Ruffell <sruffell@digium.com> | 2010-08-10 22:08:02 +0000 |
---|---|---|
committer | Shaun Ruffell <sruffell@digium.com> | 2010-08-10 22:08:02 +0000 |
commit | 513c4ef3fdb21bf25b1581ee6bf012b14bef218e (patch) | |
tree | 75f135ebbd7a8c8c97c2676f69854a40055fcd28 /drivers/dahdi/dahdi-base.c | |
parent | 2a2f2b6485c32e94627601e66311420e367314ca (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/dahdi-base.c')
-rw-r--r-- | drivers/dahdi/dahdi-base.c | 14 |
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 */ |