media: check status of dmxdev->exit in poll functions of demux&dvr 98/26998/1
authorChangbing Xiong <cb.xiong@samsung.com>
Thu, 21 Aug 2014 02:05:40 +0000 (23:05 -0300)
committerChangbing Xiong <cb.xiong@samsung.com>
Wed, 3 Sep 2014 03:25:27 +0000 (11:25 +0800)
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.

Change-Id: Id685db6f37c7a3f454e4a93234a38bb65dfc43d9
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 7a5c070..42b5e70 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) {