V4L/DVB (5052): Pvrusb2: Remove stream claiming hack from /dev/radio
authorMike Isely <isely@pobox.com>
Thu, 28 Dec 2006 02:33:00 +0000 (23:33 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Wed, 21 Feb 2007 15:34:33 +0000 (13:34 -0200)
Trying to temporarily check that the stream is not claimed during open
of the radio device is at best a race condition.  What's to stop
another app from claiming the stream anyway the instant after the
check is done?  The implementation for this was dicey anyway.  So it's
removed.  The only "price" for this is that if /dev/radioX is opened
while streaming video, then the video stream is just going to switch
to radio mode anyway.  If a user does this, he gets what he expects...

Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/pvrusb2/pvrusb2-context.c
drivers/media/video/pvrusb2/pvrusb2-context.h
drivers/media/video/pvrusb2/pvrusb2-v4l2.c

index 69786cdaa8598a329c04d1ba8b8499180004c7bd..cf129746205dbae6e1775cd8fb7d0350b9ea5bcd 100644 (file)
@@ -188,17 +188,6 @@ 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)
 {
index 4d0f4ad641223bdd4cff78c22afdecbabfd3e1e6..6327fa1f7e4f24864a6377aa2090f4ab96a19119 100644 (file)
@@ -76,8 +76,6 @@ 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 *);
 
index f74727983df3e312112300a9b85ead9e7e35332d..cc3260f37e846a979ae7b333db38814ae96d7e4e 100644 (file)
@@ -925,29 +925,14 @@ static int pvr2_v4l2_open(struct inode *inode, struct file *file)
                pvr2_trace(PVR2_TRACE_STRUCT,"Creating pvr_v4l2_fh id=%p",fhp);
                pvr2_channel_init(&fhp->channel,vp->channel.mc_head);
 
-               /* pk: warning, severe ugliness follows. 18+ only.
-                  please blaim V4L(ivtv) for braindamaged interfaces,
-                  not the implementor. This is probably flawed, but
-                  suggestions on how to do this "right" are welcome! */
+               /* Opening the /dev/radioX device implies a mode switch.
+                  So execute that here.  Note that you can get the
+                  IDENTICAL effect merely by opening the normal video
+                  device and setting the input appropriately. */
                if (dip->config == pvr2_config_radio) {
-                       int ret;
-                       if ((pvr2_channel_check_stream_no_lock(&fhp->channel,
-                                             fhp->dev_info->stream)) != 0) {
-                               /* We can 't switch modes while streaming */
-                               pvr2_channel_done(&fhp->channel);
-                               kfree(fhp);
-                               pvr2_context_exit(vp->channel.mc_head);
-                               return -EBUSY;
-                       }
-
-                       if ((ret = pvr2_ctrl_set_value(
+                       pvr2_ctrl_set_value(
                                pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_INPUT),
-                                                 PVR2_CVAL_INPUT_RADIO))) {
-                               pvr2_channel_done(&fhp->channel);
-                               kfree(fhp);
-                               pvr2_context_exit(vp->channel.mc_head);
-                               return ret;
-                       }
+                               PVR2_CVAL_INPUT_RADIO);
                }
 
                fhp->vnext = NULL;