[linux-dvb] [patch] fix two minor issues in dvb_core

Johannes Stezenbach js at linuxtv.org
Mon Jun 6 20:19:43 CEST 2005


Peter Beutner wrote:
> Johannes Stezenbach schrieb:
> >On Sat, Jun 04, 2005 at 09:48:13PM +0200, Peter Beutner wrote:
> >>Prevent this by automatically returning zero if frontend state is 
> >>FE_RETUNE.
> >
> >Hm, nice catch. Did you actually manage to hit this race?
> yes, I ccasionally saw it when using tzap. The first line reports a 
> HAS_LOCK, while the second(and sometimes third) shows no signal lock and 
>  next one finally has the lock again.

OK, I comitted this part of your patch (two unrelated fixes shouldn't
be comitted togther anyway). Thanks!


> >>In dvb_dmxdev_filter_start if we go out because of an error, release 
> >>previously allocated demux_feed.
> >
> >This is a bit subtle. The feed is released in dvb_demux_release() (when
> >the device is closed). What was the problem you were trying to fix with
> >this patch?
> The problem is if you change the pid filter without closing the demux 
> device. For example when changing the channel. Consider the following 
> sequence:
> tune();
> ioctl(DMX_SET_PES_FILTER);
> ioctl(DMX_START);
> ...
> ioctl(DMX_STOP);
> tune();
> ioctl(DMX_SET_PES_FILTER);
> ioctl(DMX_START);
> ...
> (xine does it this way for example)
> 
> As the status of the filter isn't set to DMXDEV_STATE_GO if an error 
> occurs in dvb_dmx_filter_start, it wont be released in 
> dvb_dmx_filter_stop. Because the number of filters is limited, it will 
> run out of filters after zapping through a few channels

Hm, it looks like you are right. The code is just too confusing :-(

E.g dmx_ts_feed_set() calls dvb_demux_feed_add(), but since theres
no such thing as dmx_ts_feed_unset(), the corresponding call
to dvb_demux_feed_del() is part of dvbdmx_release_ts_feed().

What drivers dod you test this with?

> Btw just ~5 lines above the one i changed with the patch, there is 
> exactly the same situation. And there it is done the way as the patch 
> does it.

Two questions:
- why does ->start_filtering() fail?
- does the same bug exist for the section filters?

Johannes




More information about the linux-dvb mailing list