From b491774013c2cdf1da956e8e586b2bc53935c72d Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Mon, 13 Jun 2011 15:53:34 +0000 Subject: [PATCH] sectionsd: improve deletion of surplus events in addEvent() If the number of events is bigger than the configured maximum, first remove old events and only if there are none left start removing the most future events. git-svn-id: file:///home/bas/coolstream_public_svn/THIRDPARTY/applications/neutrino-experimental@1543 e54a6e83-5905-42d5-8d5c-058d10e6a962 Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/418be814a8ea07eb2c2e974eedcad04432fd605b Author: Stefan Seyfried Date: 2011-06-13 (Mon, 13 Jun 2011) ------------------ This commit was generated by Migit --- src/sectionsd/sectionsd.cpp | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/sectionsd/sectionsd.cpp b/src/sectionsd/sectionsd.cpp index bf299fff2..8592c6dba 100644 --- a/src/sectionsd/sectionsd.cpp +++ b/src/sectionsd/sectionsd.cpp @@ -966,18 +966,38 @@ static void addEvent(const SIevent &evt, const time_t zeit, bool cn = false) deleteEvent(e->uniqueKey()); readLockEvents(); if (mySIeventsOrderUniqueKey.size() >= max_events) { - //FIXME: Set Old Events to 0 if limit is reached... MySIeventsOrderFirstEndTimeServiceIDEventUniqueKey::iterator lastEvent = - mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.end(); - lastEvent--; + mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.begin(); - //preserve events of current channel - readLockMessaging(); - while ((lastEvent != mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.begin()) && - ((*lastEvent)->get_channel_id() == messaging_current_servicekey)) { +/* if you don't want the new "delete old events first" method but + * the old-fashioned "delete future events always", invert this */ +#if 0 + bool back = true; +#else + time_t now = time(NULL); + bool back = false; + if ((*lastEvent)->times.size() == 1) + { + if ((*lastEvent)->times.begin()->startzeit + (long)(*lastEvent)->times.begin()->dauer >= now - oldEventsAre) + back = true; + } else + printf("[sectionsd] addevent: times.size != 1, please report\n"); +#endif + if (back) + { + // fprintf(stderr, "<"); + lastEvent = mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.end(); lastEvent--; + + //preserve events of current channel + readLockMessaging(); + while ((lastEvent != mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.begin()) && + ((*lastEvent)->get_channel_id() == messaging_current_servicekey)) { + lastEvent--; + } + unlockMessaging(); } - unlockMessaging(); + // else fprintf(stderr, ">"); unlockEvents(); deleteEvent((*lastEvent)->uniqueKey()); } @@ -1011,7 +1031,6 @@ static void addEvent(const SIevent &evt, const time_t zeit, bool cn = false) // nicht vorhanden -> einfuegen mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.insert(ie->second); mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.insert(ie->second); - } // Und die Zeiten im Event updaten