[media] DVB: dvb_frontend: clear stale events on FE_SET_FRONTEND
authorAndreas Oberritter <obi@linuxtv.org>
Thu, 4 Aug 2011 15:33:14 +0000 (12:33 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 3 Sep 2011 11:48:12 +0000 (08:48 -0300)
  the first event after an attempt to tune.

Signed-off-by: Andreas Oberritter <obi@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-core/dvb_frontend.c

index 45ea843d93de0b8159a1dad7d6672d0d5f6aea33..41023111220445ecccb2172186da0d7eabf4b919 100644 (file)
@@ -220,6 +220,16 @@ static int dvb_frontend_get_event(struct dvb_frontend *fe,
        return 0;
 }
 
+static void dvb_frontend_clear_events(struct dvb_frontend *fe)
+{
+       struct dvb_frontend_private *fepriv = fe->frontend_priv;
+       struct dvb_fe_events *events = &fepriv->events;
+
+       mutex_lock(&events->mtx);
+       events->eventr = events->eventw;
+       mutex_unlock(&events->mtx);
+}
+
 static void dvb_frontend_init(struct dvb_frontend *fe)
 {
        dprintk ("DVB: initialising adapter %i frontend %i (%s)...\n",
@@ -1891,6 +1901,7 @@ static int dvb_frontend_ioctl_legacy(struct file *file,
                /* Request the search algorithm to search */
                fepriv->algo_status |= DVBFE_ALGO_SEARCH_AGAIN;
 
+               dvb_frontend_clear_events(fe);
                dvb_frontend_add_event(fe, 0);
                dvb_frontend_wakeup(fe);
                fepriv->status = 0;