mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08:00
[media] stk1160: Make sure current buffer is released
The available (i.e. not used) buffers are returned by stk1160_clear_queue(), on the stop_streaming() path. However, this is insufficient and the current buffer must be released as well. Fix it. Cc: stable@vger.kernel.org Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
e933c6bc67
commit
aeff092767
@ -240,6 +240,11 @@ static int stk1160_stop_streaming(struct stk1160 *dev)
|
||||
if (mutex_lock_interruptible(&dev->v4l_lock))
|
||||
return -ERESTARTSYS;
|
||||
|
||||
/*
|
||||
* Once URBs are cancelled, the URB complete handler
|
||||
* won't be running. This is required to safely release the
|
||||
* current buffer (dev->isoc_ctl.buf).
|
||||
*/
|
||||
stk1160_cancel_isoc(dev);
|
||||
|
||||
/*
|
||||
@ -620,8 +625,16 @@ void stk1160_clear_queue(struct stk1160 *dev)
|
||||
stk1160_info("buffer [%p/%d] aborted\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
}
|
||||
/* It's important to clear current buffer */
|
||||
dev->isoc_ctl.buf = NULL;
|
||||
|
||||
/* It's important to release the current buffer */
|
||||
if (dev->isoc_ctl.buf) {
|
||||
buf = dev->isoc_ctl.buf;
|
||||
dev->isoc_ctl.buf = NULL;
|
||||
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
|
||||
stk1160_info("buffer [%p/%d] aborted\n",
|
||||
buf, buf->vb.v4l2_buf.index);
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->buf_lock, flags);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user