media: v4l2-ctrls.c: fix epoll() by calling poll_wait first
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Thu, 7 Feb 2019 11:49:44 +0000 (06:49 -0500)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Mon, 18 Feb 2019 19:46:42 +0000 (14:46 -0500)
The epoll function expects that whenever the poll file op is
called, the poll_wait function is also called. That didn't
always happen in v4l2_ctrl_poll(). Fix this, otherwise epoll()
would timeout when it shouldn't.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/v4l2-core/v4l2-ctrls.c

index 99308dac2daa8c28e32090ddf7c5acb2e3ace09c..b79d3bbd835054e3ebacbf47661ac0bfbe7907f3 100644 (file)
@@ -4166,9 +4166,9 @@ __poll_t v4l2_ctrl_poll(struct file *file, struct poll_table_struct *wait)
 {
        struct v4l2_fh *fh = file->private_data;
 
+       poll_wait(file, &fh->wait, wait);
        if (v4l2_event_pending(fh))
                return EPOLLPRI;
-       poll_wait(file, &fh->wait, wait);
        return 0;
 }
 EXPORT_SYMBOL(v4l2_ctrl_poll);