summaryrefslogtreecommitdiff
path: root/update.c
diff options
context:
space:
mode:
authorhorchi <vdr@jwendel.de>2018-02-24 17:29:07 +0100
committerhorchi <vdr@jwendel.de>2018-02-24 18:34:40 +0100
commitfb6de12636c538ab4ddaae0cc32089eac9584ed9 (patch)
tree6d769d1f32770fa90323028b4609c490a9a1cb86 /update.c
parent49e5a4dd952d1fe444d40f107d5300132cef5eeb (diff)
downloadvdr-plugin-epg2vdr-fb6de12636c538ab4ddaae0cc32089eac9584ed9.tar.gz
vdr-plugin-epg2vdr-fb6de12636c538ab4ddaae0cc32089eac9584ed9.tar.bz2
2018-02-23 version 1.1.89 (horchi)\n - change: Improved switch timer 'timing'\n\n
Diffstat (limited to 'update.c')
-rw-r--r--update.c55
1 files changed, 54 insertions, 1 deletions
diff --git a/update.c b/update.c
index 1a39a1d..ae51fe8 100644
--- a/update.c
+++ b/update.c
@@ -93,6 +93,7 @@ cUpdate::cUpdate(cPluginEPG2VDR* aPlugin)
manualTrigger = no;
videoBasePath = 0;
dbReconnectTriggered = no;
+ switchTimerTrigger = no;
fullreload = no;
epgdBusy = yes;
@@ -830,6 +831,20 @@ int cUpdate::exitDb()
}
//***************************************************************************
+// Send Event
+//***************************************************************************
+
+void cUpdate::sendEvent(int event, void* userData)
+{
+ cUpdate* update = (cUpdate*)userData;
+ cMutexLock lock(&update->eventHookMutex);
+
+ update->eventHook.push(event);
+ tell(3, "sendEvent(%d)", event);
+ update->waitCondition.Broadcast();
+}
+
+//***************************************************************************
// Check Connection
//***************************************************************************
@@ -1239,6 +1254,39 @@ void cUpdate::Stop()
Cancel(10); // wait up to 10 seconds for thread was stopping
}
+void cUpdate::processEvents()
+{
+ cMutexLock lock(&eventHookMutex);
+
+ while (!eventHook.empty())
+ {
+ int event = eventHook.front();
+ eventHook.pop();
+
+ switch (event)
+ {
+ case evtSwitchTimer:
+ {
+ switchTimerTrigger = yes;
+ break;
+ }
+ }
+ }
+
+ for (auto it = timerThreads.begin(); it != timerThreads.end(); )
+ {
+ if (!(*it)->isActive())
+ {
+ delete *it;
+ it = timerThreads.erase(it);
+ }
+ else
+ {
+ it++;
+ }
+ }
+}
+
//***************************************************************************
// Action
//***************************************************************************
@@ -1265,6 +1313,10 @@ void cUpdate::Action()
waitCondition.TimedWait(mutex, 60*1000);
+ // first process events
+
+ processEvents();
+
// we pass here at least once per minute ...
if (checkConnection(reconnectTimeout) != success)
@@ -1272,7 +1324,8 @@ void cUpdate::Action()
// switch timer
- checkSwitchTimer();
+ if (switchTimerTrigger)
+ checkSwitchTimer();
// recording stuff