C.Y.M wrote: > I wanted to test this "eggtimer-0.9.1" plugin with vdr-1.3.44 and it seems to > work pretty well. But, when I have the eggtimer switch to a specific channel on > a timer, I get the following error message when I try to change channels > manually after the eggtimer switched the channel. > > vdr: [13902] ERROR: Eggtimer thread 13902 won't end (waited 30 seconds) - > canceling it... > > Has anyone seen this error? > > Best Regards, > > _______________________________________________ > vdr mailing list > vdr@xxxxxxxxxxx > http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr > I tried to reproduce the problem but things worked well on my 2-card-system. Eggtimer switched channel, I was able to zap to another transponder, start a recording there and then zapped to channel that was provided by a third transponder - worked so far. I then started VDR with only one device and got the same error as mentioned by C.Y.M. Do I have to lock/unlock the cDevice when switching to a channel? I think the error must be within that code: void cEggtimerThread::Stop(void) { #ifdef DEBUG printf("cEggtimerThread::Stop\n" ); #endif running = false; Cancel(30); } void cEggtimerThread::Action(void) { #ifdef DEBUG printf("cEggtimerThread::Action\n" ); #endif while ( running ) { // time is over ? if (eggtimer->TimeReached()) { switch (eggtimer->action) { case EGGTIMER_ACTION_SWITCH: { // switch to channel cChannel *chan = Channels.GetByNumber( eggtimer->channel ); cDevice *device = cDevice::ActualDevice(); if ( chan == NULL || device == NULL || !device->SwitchChannel(chan , true) ) { #if VDRVERSNUM < 10314 Interface->Error( tr("Eggtimer: could not switch channel") ); #else Skins.Message( mtError, tr("Eggtimer: could not switch channel") ); #endif } Stop(); // Stop eggtimer thread } break; case EGGTIMER_ACTION_MSG: { // OSD message time_t now = time(NULL); // for repeating messages we need // current time // If 2.5 * MessageTime (VDR Setup) has expired => display again if (now - lastInfo >= (int) (2.5 * Setup.OSDMessageTime) ) { // Display a status msg for OSDMessageTime seconds #if VDRVERSNUM < 10307 Interface->Status( eggtimer->msg ); usleep( Setup.OSDMessageTime * 1000); Interface->Status( NULL ); #else Skins.Message( mtStatus, eggtimer->msg ); cCondWait::SleepMs( Setup.OSDMessageTime * 1000); Skins.Message( mtStatus, NULL ); #endif // remember time when message was displayed lastInfo = now; } } break; case EGGTIMER_ACTION_COMMAND: { // Execute command cCommand *command = Commands.Get( eggtimer->command ); if (command != NULL) { command->Execute(); } else #if VDRVERSNUM < 10314 Interface->Error( tr("Eggtimer: command not found") ); #else Skins.Message( mtError, tr("Eggtimer: command not found") ); #endif Stop(); } break; } } // Sleep 0.5 seconds #if VDRVERSNUM < 10314 usleep(500000); #else cCondWait::SleepMs(500); #endif } if (eggtimer != NULL) delete eggtimer; } Thanks for any hints http://www.wi-bw.tfh-wildau.de/~pjuszack/digicam