[mythtv] [PATCH] Control duplicates by channel ID

David Shay david at shay.net
Sun Aug 5 19:47:57 UTC 2007


On 8/5/07, David Shay <david at shay.net> wrote:
> On 8/5/07, David Engel <david at istwok.net> wrote:
> > On Sun, Aug 05, 2007 at 07:42:42AM -0500, David Shay wrote:
> > > Determined what at least one of the problems here is.  The primary key
> > > to oldrecorded does not include chanid. This makes the "REPLACE"
> > > statement in AddHistory not add a new record when it now should.  I'm
> > > not sure if there would be any other impacts of just adding chanid
> > > into the key for oldrecorded.
> >
> > Oh, shoot.  Yes, oldrecorded imposes the restriction of one entry per
> > title, starttime and callsign.  The scheduler relies on this when
> > restoring any previous status for programs that aren't currently
> > recording and for catching reactivation requests.  I'd be very
> > concerned about the impact of allowing additional entries per chanid
> > on this functionality.
> >
>
> Seems like oldrecorded primarily gets updated by the start of
> RunScheduler, where everything gets set to rsAborted, and then
> subsequent calls to AddHistory.
>
> I've done a quick analysis of where AddHistory is called within
> scheduler.cpp. (The only one outside is in tv_rec.cpp, and it's OK).
> Here's where it's called:
>
> UpdateRecStatus (the pointer to ProgramInfo version)
>    Could be changed to use IsSameProgram instead of
>    IsSameProgramTimeslot and this might be OK?
>
> UpdateRecStatus(cardid, chanid,startts,recstatus,endts)
>    Already being qualified by chanid check, should be OK?
>
> SlaveConnected
>    First two calls are being qualified by cardid already.  This happens
>    in many later calls, as well.  My assumption is that if it's already
>    qualified by cardid, that should be sufficient and no additional
>    qualification by chanid would be necessary.
>
>    The last call is not qualified by anything, but that seems to just be the
>    fall-through case.  I wouldn't think this one would be disturbed by the
>    index not being there, but I don't know.  In what case would that matter?
>
> SlaveDisconnected
>    This call is qualified by cardid.
>
> AddRecording
>    Was using IsSameProgramTimeslot.  I guess this should also be
>    changed to IsSameProgram?
>
> RunScheduler
>    Around line 1411 now, there is a check for if nextrecording->recstatus
>    != rsWillRecord, then AddHistory gets called.  I'm not sure from this code,
>    what status nextrecording would even get set to?
>
>    The next call is qualified by cardid.
>    The next call is based on IsTunerLocked, should be OK.
>    The last call is unqualified, but I think should be OK, since it is just in
>    the main loop through the PI records.
>
> Seems to me like even those unqualified calls are OK, and that the
> ones qualified by cardid are OK as well.
>
> ReactivateRecording within programinfo.cpp would need to get changed
> to also pass chanid as a parameter as well.  But apparently that only
> gets called from the GUI, not the scheduler.
>
> > > I'm pretty sure there are some other cases where things could go wrong
> > > as well in the calls to AddHistory, particularly where
> > > IsSameProgramTimeslot is called on a pointer to a PI structure.  There
> > > the checks don't take chanid into account.  In my current code I've
> >
> > I think IsSameProgramTimeslot is a hold over from long ago when the
> > program start and times weren't kept around and only the recording
> > times available.  The IsSameProgramTimeslot check was made fuzzy to
> > allow for differences in the recording times that could creep in
> > between the scheduler and the recorders.  It looks like
> > Scheduler::UpdateRecStatus is the only remaining user of
> > IsSameProgramTimeslot and it can probably be replaced with
> > IsSameProgram now.
>
>
> So you are saying if you had pre-roll/post-roll kinds of things,
> that's what it would be used for?  Right now, anyway,
> IsSameProgramTimeslot looks to make sure that the given program is
> wholly contained within the other program, and matches on title and
> chanid.  The only thing I'm a little concerned about is that
> IsSameProgram does no element of time checking at all.  Wouldn't that
> be a problem?
>

If this analysis is correct, attached is the latest patch that
includes the update to dbcheck.cpp.  I didn't phase out
IsSameProgramTimeslot, but just qualified it with the dupchanid and
chanid checks.

Let me know.


More information about the mythtv-dev mailing list