]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
V4L/DVB (7713): pvrusb2: Implement cleaner DVB kernel thread shutdown
authorMike Isely <isely@pobox.com>
Mon, 7 Apr 2008 05:57:13 +0000 (02:57 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Thu, 24 Apr 2008 17:09:49 +0000 (14:09 -0300)
Earlier fix to handle DVB feed thread aborts was overly-aggressive.
We can take better advantage of what kthread_stop() can do.  This
change simplifies things.

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

index d82fceae4689108a1cd99173333a2f5c5dec54b0..c20eef0f077e42b51787c4a879f10a83db7dce82 100644 (file)
@@ -41,7 +41,6 @@ static int pvr2_dvb_feed_func(struct pvr2_dvb_adapter *adap)
        stream = adap->channel.stream->stream;
 
        for (;;) {
-               if (adap->feed_thread_stop) break;
                if (kthread_should_stop()) break;
 
                /* Not sure about this... */
@@ -76,7 +75,7 @@ static int pvr2_dvb_feed_func(struct pvr2_dvb_adapter *adap)
                ret = wait_event_interruptible(
                    adap->buffer_wait_data,
                    (pvr2_stream_get_ready_count(stream) > 0) ||
-                   adap->feed_thread_stop);
+                   kthread_should_stop());
                if (ret < 0) break;
        }
 
@@ -110,8 +109,6 @@ static void pvr2_dvb_stream_end(struct pvr2_dvb_adapter *adap)
        struct pvr2_stream *stream;
 
        if (adap->thread) {
-               adap->feed_thread_stop = !0;
-               pvr2_dvb_notify(adap);
                kthread_stop(adap->thread);
                adap->thread = NULL;
        }
@@ -182,7 +179,6 @@ static int pvr2_dvb_stream_do_start(struct pvr2_dvb_adapter *adap)
                if (ret < 0) return ret;
        }
 
-       adap->feed_thread_stop = 0;
        adap->thread = kthread_run(pvr2_dvb_feed_thread, adap, "pvrusb2-dvb");
 
        if (IS_ERR(adap->thread)) {
index 2dd0d4ef22a2cf5986f11c1ee6aef5537779cb17..884ff916a352cce11c0e7e48e9afdb1f1fbb942b 100644 (file)
@@ -28,7 +28,6 @@ struct pvr2_dvb_adapter {
        unsigned int            stream_run:1;
 
        wait_queue_head_t       buffer_wait_data;
-       int                     feed_thread_stop;
        char                    *buffer_storage[PVR2_DVB_BUFFER_COUNT];
 };