Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 296da3cd authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab
Browse files

[media] pwc: poll(): Check that the device has not beem claimed for streaming already



Some apps which use read() start the streaming through a call to poll(),
this means that if another app has already claimed the device for streaming
(through for example a s_fmt, or a reqbufs), that the poll should fail instead
of getting passed through to vb2_poll.

We only check for this when the app is polling for reads, so that ctrl events
still work.

Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 0bf0f713
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -625,10 +625,19 @@ static ssize_t pwc_video_read(struct file *file, char __user *buf,
static unsigned int pwc_video_poll(struct file *file, poll_table *wait)
{
	struct pwc_device *pdev = video_drvdata(file);
	unsigned long req_events = poll_requested_events(wait);

	if (!pdev->udev)
		return POLL_ERR;

	if ((req_events & (POLLIN | POLLRDNORM)) &&
	    pdev->vb_queue.num_buffers == 0 &&
	    !pdev->iso_init) {
		/* This poll will start a read stream, check capt_file */
		if (pwc_test_n_set_capt_file(pdev, file))
			return POLL_ERR;
	}

	return vb2_poll(&pdev->vb_queue, file, wait);
}