[media] media: check status of dmxdev->exit in poll functions of demux&dvr
authorChangbing Xiong <cb.xiong@samsung.com>
Thu, 21 Aug 2014 02:05:40 +0000 (23:05 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Tue, 2 Sep 2014 14:50:42 +0000 (11:50 -0300)
when usb-type tuner is pulled out, user applications did not close device's FD,
and go on polling the device, we should return POLLERR directly.

Signed-off-by: Changbing Xiong <cb.xiong@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/dvb-core/dmxdev.c

index 7a5c07003c415299956d2e3e3fb95cadc8448f22..42b5e70d5ca71de5ded369f157168dfbe6cd6641 100644 (file)
@@ -1085,9 +1085,10 @@ static long dvb_demux_ioctl(struct file *file, unsigned int cmd,
 static unsigned int dvb_demux_poll(struct file *file, poll_table *wait)
 {
        struct dmxdev_filter *dmxdevfilter = file->private_data;
+       struct dmxdev *dmxdev = dmxdevfilter->dev;
        unsigned int mask = 0;
 
-       if (!dmxdevfilter)
+       if ((!dmxdevfilter) || (dmxdev->exit))
                return POLLERR;
 
        poll_wait(file, &dmxdevfilter->buffer.queue, wait);
@@ -1181,6 +1182,9 @@ static unsigned int dvb_dvr_poll(struct file *file, poll_table *wait)
 
        dprintk("function : %s\n", __func__);
 
+       if (dmxdev->exit)
+               return POLLERR;
+
        poll_wait(file, &dmxdev->dvr_buffer.queue, wait);
 
        if ((file->f_flags & O_ACCMODE) == O_RDONLY) {