V4L/DVB (11875): dvb_frontend: fix case where fepriv->exit not reset
authorDevin Heitmueller <dheitmueller@kernellabs.com>
Thu, 21 May 2009 02:58:16 +0000 (23:58 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 16 Jun 2009 22:14:15 +0000 (19:14 -0300)
The fact that we now explicitly set fepriv->exit = 1 when the thread is
shutting down exposed an edge case where it was not being reset back to zero
once the thread went away in some cases.  This resulted in failures in cases
where the frontend was closed, and then opened O_RDONLY, since in that case
the thread is not being restarted but it was checking the fepriv->exit flag.

Thanks to Thierry Lelegard, who and encountered and debugged a large portion
of the issue in the same twelve hours that I did (as well as testing my patch).

Cc: Thierry Lelegard <thierry.lelegard@tv-numeric.com>
Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-core/dvb_frontend.c

index 1f38dd86f542b1deea1b09f0a8eaa24a87450f37..f50ca7292a7d4e8bd6c69ffd58368db0c749b923 100644 (file)
@@ -657,6 +657,7 @@ restart:
        }
 
        fepriv->thread = NULL;
+       fepriv->exit = 0;
        mb();
 
        dvb_frontend_wakeup(fe);