Am 02.03.2012 11:06, schrieb Klaus Schmidinger: > On 29.02.2012 21:33, Udo Richter wrote: >> Roughly, the callback should be at the places where these two get called: >> >> DELETENULL(liveSubtitle); >> DELETENULL(dvbSubtitleConverter); >> >> (Thats how VDR's own receivers get out of way.) > > There are two places in GetDevice() where > cStatus::MsgChannelSwitch(this, 0) > is called, but they are both *after* the final call to GetDevice(). > And there is this comment > > // only report status if we are actually going to switch the channel > > which refers to a change that was made in version 1.1.10: > > - Only calling cStatus::MsgChannelSwitch() if a channel is actually > going to > be switched or has actually been switched successfully (thanks to Stefan > Huelswitt). Good point. What if VDR wants to switch, but fails. Is it possible that the channel change still fails after deleting liveSubtitle and dvbSubtitleConverter? How does VDR itself handle this? Need to investigate this. If a call to MsgChannelSwitch(this, 0) was done on channel change, we have to make sure that the corresponding call for the new channel does happen, or - worst case - there's a call for the old channel again. > What I really see as a problem here now is that the first call to > GetDevice() may call a device's DetachAllReceivers() and the second > GetDevice() call may then decide to actually use a different device. > I'm currently considering giving GetDevice() another parameter: > > static cDevice *GetDevice(const cChannel *Channel, int Priority, bool > LiveView, bool Query = false); +1, as I know that something like this was on some wish lists for some time. ;) Cheers, Udo _______________________________________________ vdr mailing list vdr@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr