summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorMike Isely <isely@pobox.com>2006-12-27 20:08:55 -0600
committerMike Isely <isely@pobox.com>2006-12-27 20:08:55 -0600
commit7f98a4f1c403739faaf9a7c9feda8437215e8ae7 (patch)
treef63acd93e725843b143c7ebb42524d5e816e3947 /linux
parentd33eaf58a160d1bf2e2d8fdb593c76d02e56bb2a (diff)
downloadmediapointer-dvb-s2-7f98a4f1c403739faaf9a7c9feda8437215e8ae7.tar.gz
mediapointer-dvb-s2-7f98a4f1c403739faaf9a7c9feda8437215e8ae7.tar.bz2
pvrusb2: Implement stream claim checking function
From: Pantelis Koukousoulas <pakt223@freemail.gr> 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>
Diffstat (limited to 'linux')
-rw-r--r--linux/drivers/media/video/pvrusb2/pvrusb2-context.c11
-rw-r--r--linux/drivers/media/video/pvrusb2/pvrusb2-context.h2
2 files changed, 13 insertions, 0 deletions
diff --git a/linux/drivers/media/video/pvrusb2/pvrusb2-context.c b/linux/drivers/media/video/pvrusb2/pvrusb2-context.c
index 19787dc81..6ad1ce7dc 100644
--- a/linux/drivers/media/video/pvrusb2/pvrusb2-context.c
+++ b/linux/drivers/media/video/pvrusb2/pvrusb2-context.c
@@ -205,6 +205,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,
struct pvr2_context_stream *sp)
{
diff --git a/linux/drivers/media/video/pvrusb2/pvrusb2-context.h b/linux/drivers/media/video/pvrusb2/pvrusb2-context.h
index 69c1f3a92..5e960ae51 100644
--- a/linux/drivers/media/video/pvrusb2/pvrusb2-context.h
+++ b/linux/drivers/media/video/pvrusb2/pvrusb2-context.h
@@ -85,6 +85,8 @@ void pvr2_channel_init(struct pvr2_channel *,struct pvr2_context *);
void pvr2_channel_done(struct pvr2_channel *);
int pvr2_channel_claim_stream(struct pvr2_channel *,
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_context_stream *);