V4L/DVB (5038): Pvrusb2: Implement stream claim checking function
Add (and expose) a new function, pvr2_channel_check_stream_no_lock(), in pvrusb2-context.c. This is hopefully the last V4L2 interface related patch to change anything outside pvrusb2-v4l2.c. We need this to implement the open() for the radio device. The reason is that within the *enter_context() section of open() we need to ensure nobody is streaming and if we cannot, we should cleanup after ourselves and return -EBUSY. We cannot just use claim_stream() because: 1) That would cause a deadlock trying to re-acquire the context lock 2) We only need to ensure that nobody is streaming. We don't need to actually acquire the stream. Again, this is a kinda ugly patch. Feel free to improve. Signed-off-by: Pantelis Koukousoulas <pakt223@freemail.gr> Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
2fdf3d9c94
commit
99cfdf5cc6
2 changed files with 13 additions and 0 deletions
|
@ -188,6 +188,17 @@ void pvr2_channel_done(struct pvr2_channel *cp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int pvr2_channel_check_stream_no_lock(struct pvr2_channel *cp,
|
||||||
|
struct pvr2_context_stream *sp)
|
||||||
|
{
|
||||||
|
if (sp == cp->stream) return 0;
|
||||||
|
if (sp->user) {
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int pvr2_channel_claim_stream(struct pvr2_channel *cp,
|
int pvr2_channel_claim_stream(struct pvr2_channel *cp,
|
||||||
struct pvr2_context_stream *sp)
|
struct pvr2_context_stream *sp)
|
||||||
{
|
{
|
||||||
|
|
|
@ -76,6 +76,8 @@ void pvr2_channel_init(struct pvr2_channel *,struct pvr2_context *);
|
||||||
void pvr2_channel_done(struct pvr2_channel *);
|
void pvr2_channel_done(struct pvr2_channel *);
|
||||||
int pvr2_channel_claim_stream(struct pvr2_channel *,
|
int pvr2_channel_claim_stream(struct pvr2_channel *,
|
||||||
struct pvr2_context_stream *);
|
struct pvr2_context_stream *);
|
||||||
|
int pvr2_channel_check_stream_no_lock(struct pvr2_channel *,
|
||||||
|
struct pvr2_context_stream *);
|
||||||
struct pvr2_ioread *pvr2_channel_create_mpeg_stream(
|
struct pvr2_ioread *pvr2_channel_create_mpeg_stream(
|
||||||
struct pvr2_context_stream *);
|
struct pvr2_context_stream *);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue