aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/epgcache.cpp
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2007-10-22 15:11:07 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2007-10-22 15:11:07 +0000
commit69d3f11e4bf566bc12981447c2b8cb999177b007 (patch)
treedef747b5ba2411feb7b2ce6581c045336b1f8743 /lib/dvb/epgcache.cpp
parentbc3935e0fe2e52ec3f0981baf1d46ec15764a20e (diff)
downloadenigma2-69d3f11e4bf566bc12981447c2b8cb999177b007.tar.gz
enigma2-69d3f11e4bf566bc12981447c2b8cb999177b007.zip
epg fix (fixes bluescreens on ZDF Transponder)
Diffstat (limited to 'lib/dvb/epgcache.cpp')
-rw-r--r--lib/dvb/epgcache.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp
index 6767c4ad..247b0c05 100644
--- a/lib/dvb/epgcache.cpp
+++ b/lib/dvb/epgcache.cpp
@@ -372,8 +372,9 @@ void eEPGCache::DVBChannelStateChanged(iDVBChannel *chan)
}
}
-void eEPGCache::FixOverlapping(std::pair<eventMap,timeMap> &servicemap, time_t TM, int duration, const timeMap::iterator &tm_it, const uniqueEPGKey &service)
+bool eEPGCache::FixOverlapping(std::pair<eventMap,timeMap> &servicemap, time_t TM, int duration, const timeMap::iterator &tm_it, const uniqueEPGKey &service)
{
+ bool ret = false;
timeMap::iterator tmp = tm_it;
while ((tmp->first+tmp->second->getDuration()-300) > TM)
{
@@ -406,6 +407,7 @@ void eEPGCache::FixOverlapping(std::pair<eventMap,timeMap> &servicemap, time_t T
}
else
servicemap.second.erase(tmp--);
+ ret = true;
}
else
{
@@ -434,12 +436,14 @@ void eEPGCache::FixOverlapping(std::pair<eventMap,timeMap> &servicemap, time_t T
#endif
delete tmp->second;
servicemap.second.erase(tmp++);
+ ret = true;
}
else
++tmp;
if (tmp == servicemap.second.end())
break;
}
+ return ret;
}
void eEPGCache::sectionRead(const __u8 *data, int source, channel_data *channel)
@@ -523,7 +527,11 @@ void eEPGCache::sectionRead(const __u8 *data, int source, channel_data *channel)
eventData *tmp = ev_it->second;
ev_it->second = tm_it_tmp->second =
new eventData(eit_event, eit_event_size, source);
- FixOverlapping(servicemap, TM, duration, tm_it_tmp, service);
+ if (FixOverlapping(servicemap, TM, duration, tm_it_tmp, service))
+ {
+ prevEventIt = servicemap.first.end();
+ prevTimeIt = servicemap.second.end();
+ }
delete tmp;
goto next;
}
@@ -596,8 +604,6 @@ void eEPGCache::sectionRead(const __u8 *data, int source, channel_data *channel)
tm_it=prevTimeIt=servicemap.second.insert( prevTimeIt, std::pair<const time_t, eventData*>( TM, evt ) );
}
- FixOverlapping(servicemap, TM, duration, tm_it, service);
-
#ifdef EPG_DEBUG
if ( consistencyCheck )
{
@@ -617,6 +623,11 @@ void eEPGCache::sectionRead(const __u8 *data, int source, channel_data *channel)
ev_it->first, event_id );
}
#endif
+ if (FixOverlapping(servicemap, TM, duration, tm_it, service))
+ {
+ prevEventIt = servicemap.first.end();
+ prevTimeIt = servicemap.second.end();
+ }
}
next:
#ifdef EPG_DEBUG