diff options
author | darron@kewl.org <darron@kewl.org> | 2008-10-30 08:05:23 +0000 |
---|---|---|
committer | darron@kewl.org <darron@kewl.org> | 2008-10-30 08:05:23 +0000 |
commit | e531dc5ace5a66809f3a9f831deb5e5e4e83ae80 (patch) | |
tree | f8eb52ed5d4418a4caa8cf3f31904516768b9043 /linux | |
parent | dac2f4300f8d6278c56d71825e5942baadc6b77e (diff) | |
download | mediapointer-dvb-s2-e531dc5ace5a66809f3a9f831deb5e5e4e83ae80.tar.gz mediapointer-dvb-s2-e531dc5ace5a66809f3a9f831deb5e5e4e83ae80.tar.bz2 |
cx88-mpeg: final fix for analogue only compilation + de-alloc fix
From: Darron Broad <darron@kewl.org>
Final fix for when analogue only is selected
for compilation (ie, !CX88_DVB)
This tidies up previous fix and adds missing
de-alloc memory leak on fault (eg, if fe1 fails to alloc
where fe0 was allocated).
Priority: normal
Signed-off-by: Darron Broad <darron@kewl.org>
Diffstat (limited to 'linux')
-rw-r--r-- | linux/drivers/media/video/cx88/cx88-mpeg.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/linux/drivers/media/video/cx88/cx88-mpeg.c b/linux/drivers/media/video/cx88/cx88-mpeg.c index b21b0c26c..dbad45a35 100644 --- a/linux/drivers/media/video/cx88/cx88-mpeg.c +++ b/linux/drivers/media/video/cx88/cx88-mpeg.c @@ -809,10 +809,6 @@ static int __devinit cx8802_probe(struct pci_dev *pci_dev, struct cx8802_dev *dev; struct cx88_core *core; int err; -#if defined(CONFIG_VIDEO_CX88_DVB) || defined(CONFIG_VIDEO_CX88_DVB_MODULE) - struct videobuf_dvb_frontend *demod; - int i; -#endif /* general setup */ core = cx88_core_get(pci_dev); @@ -843,15 +839,21 @@ static int __devinit cx8802_probe(struct pci_dev *pci_dev, mutex_init(&dev->frontends.lock); INIT_LIST_HEAD(&dev->frontends.felist); - if (core->board.num_frontends) - printk(KERN_INFO "%s() allocating %d frontend(s)\n", __func__, core->board.num_frontends); - - for (i = 1; i <= core->board.num_frontends; i++) { - demod = videobuf_dvb_alloc_frontend(&dev->frontends, i); - if(demod == NULL) { - printk(KERN_ERR "%s() failed to alloc\n", __func__); - err = -ENOMEM; - goto fail_free; + if (core->board.num_frontends) { + struct videobuf_dvb_frontend *fe; + int i; + + printk(KERN_INFO "%s() allocating %d frontend(s)\n", __func__, + core->board.num_frontends); + for (i = 1; i <= core->board.num_frontends; i++) { + fe = videobuf_dvb_alloc_frontend(&dev->frontends, i); + if(fe == NULL) { + printk(KERN_ERR "%s() failed to alloc\n", + __func__); + videobuf_dvb_dealloc_frontends(&dev->frontends); + err = -ENOMEM; + goto fail_free; + } } } #endif |