Hi! Now that I have a spare DVB-S2 tuner (TechniSat SkyStar USB HD (adapter2); the others on this box are atm Hauppauge Nova-TD model 1172 (adapter 0+1) and TechnoTrend S2-3600 (adapter3) - all USB) I decided to play with vdr device bonding. I discovered three things: (still using vdr 1.7.29, I know I should upgrade... :) 1. The LNB setup OSD menu causes bonding to fail (it's trying to bond a DVB-T tuner) if I set the two DVB-S2 tuners as "connected to sat cable 1"; it works with "sat cable 2". Maybe it somehow thinks of (one of?) the DVB-T tuner(s) as cable 1 too? 2. The infosatepg plugin doesn't check MaySwitchTransponder() and thus grabs a bonded device when it shouldn't, I just patched that in the FreeBSD port: (plugin maintainer Cc'd) http://svnweb.freebsd.org/ports/head/multimedia/vdr-plugin-infosatepg/files/patch-infosatepg.cpp?r1=300896&r2=312357 3. Running with these four tuners (dual DVB-T and the bonded two DVB-S2) I get two different deadlocks waiting for cDvbTuner::bondMutex after live viewing a DVB-T(!) channel for longer (OSD doesn't react anymore and attaching gdb reveals two threads waiting for bondMutex) - the following two changes make it work but there probably is a better fix: (patch may apply with offsets; one of the problems I think is a lock order reversal with cDvbTuner::mutex and bondMutex when cDvbTuner::SetChannel calls back into itself with bondMutex held.) --- dvbdevice.c.orig +++ dvbdevice.c @@ -476,8 +476,10 @@ void cDvbTuner::SetChannel(const cChanne t->SetChannel(NULL); } } - else if (strcmp(GetBondingParams(Channel), BondedMaster->GetBondingParams()) != 0) + else if (strcmp(GetBondingParams(Channel), BondedMaster->GetBondingParams()) != 0) { + bondMutex.Unlock(); BondedMaster->SetChannel(Channel); + } } cMutexLock MutexLock(&mutex); if (!IsTunedTo(Channel)) @@ -761,7 +773,12 @@ bool cDvbTuner::SetFrontend(void) tone = SEC_TONE_ON; } int volt = (dtp.Polarization() == 'V' || dtp.Polarization() == 'R') ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18; - if (GetBondedMaster() != this) { +#if 1 + if (bondedTuner && !bondedMaster) +#else + if (GetBondedMaster() != this) +#endif + { tone = SEC_TONE_OFF; volt = SEC_VOLTAGE_13; } Thanx, Juergen _______________________________________________ vdr mailing list vdr@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr