X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/b14f1520fe0dabd185ab3555c9d2dd8ab5276dd0..0f9371c1c276eecc360c0051ef073a6974765340:/lib/dvb/epgcache.cpp diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp index c76b0c06..6c98011b 100644 --- a/lib/dvb/epgcache.cpp +++ b/lib/dvb/epgcache.cpp @@ -46,7 +46,6 @@ const eServiceReference &handleGroup(const eServiceReference &ref) return ref; } - eventData::eventData(const eit_event_struct* e, int size, int type) :ByteSize(size&0xFF), type(type&0xFF) { @@ -227,7 +226,11 @@ eEPGCache::eEPGCache() if (!res_mgr) eDebug("[eEPGCache] no resource manager !!!!!!!"); else + { res_mgr->connectChannelAdded(slot(*this,&eEPGCache::DVBChannelAdded), m_chanAddedConn); + if (eDVBLocalTimeHandler::getInstance()->ready()) + timeUpdated(); + } instance=this; } @@ -564,29 +567,25 @@ void eEPGCache::sectionRead(const __u8 *data, int source, channel_data *channel) #endif if (ev_erase_count > 0 && tm_erase_count > 0) // 2 different pairs have been removed { - eventData *tmp1 = ev_it->second, - *tmp2 = tm_it->second; + // exempt memory + delete ev_it->second; + delete tm_it->second; ev_it->second=evt; tm_it->second=evt; - // exempt memory - delete tmp1; - delete tmp2; } else if (ev_erase_count == 0 && tm_erase_count > 0) { - eventData *tmp = ev_it->second; + // exempt memory + delete ev_it->second; tm_it=prevTimeIt=servicemap.second.insert( prevTimeIt, std::pair( TM, evt ) ); ev_it->second=evt; - // exempt memory - delete tmp; } else if (ev_erase_count > 0 && tm_erase_count == 0) { - eventData *tmp = tm_it->second; + // exempt memory + delete tm_it->second; ev_it=prevEventIt=servicemap.first.insert( prevEventIt, std::pair( event_id, evt) ); tm_it->second=evt; - // exempt memory - delete tmp; } else // added new eventData { @@ -862,10 +861,10 @@ void eEPGCache::thread() void eEPGCache::load() { - singleLock s(cache_lock); FILE *f = fopen("/hdd/epg.dat", "r"); if (f) { + unlink("/hdd/epg.dat"); int size=0; int cnt=0; #if 0 @@ -899,6 +898,7 @@ void eEPGCache::load() fread( text1, 13, 1, f); if ( !strncmp( text1, "ENIGMA_EPG_V7", 13) ) { + singleLock s(cache_lock); fread( &size, sizeof(int), 1, f); while(size--) { @@ -1507,8 +1507,9 @@ RESULT eEPGCache::lookupEventId(const eServiceReference &service, int event_id, RESULT eEPGCache::startTimeQuery(const eServiceReference &service, time_t begin, int minutes) { + const eServiceReferenceDVB &ref = (const eServiceReferenceDVB&)handleGroup(service); Lock(); - eventCache::iterator It = eventDB.find(handleGroup(service)); + eventCache::iterator It = eventDB.find(ref); if ( It != eventDB.end() && It->second.second.size() ) { m_timemap_end = minutes != -1 ? It->second.second.upper_bound(begin+minutes*60) : It->second.second.end(); @@ -1532,7 +1533,6 @@ RESULT eEPGCache::startTimeQuery(const eServiceReference &service, time_t begin, } else m_timemap_cursor = It->second.second.begin(); - const eServiceReferenceDVB &ref = (const eServiceReferenceDVB&)handleGroup(service); currentQueryTsidOnid = (ref.getTransportStreamID().get()<<16) | ref.getOriginalNetworkID().get(); Unlock(); return 0;