From e5cbb3e43d92af2d56d886e3ddf304ac0ea4ec3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matti=20Lehtim=C3=A4ki?= Date: Sat, 12 May 2012 22:28:09 +0300 Subject: Fix ordering of cloned EPG events and purging old event. Further optimisations of event handling thread, thanks to Rolf Ahrenberg. --- tools.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/tools.c b/tools.c index 4c02c8c..4616c4b 100644 --- a/tools.c +++ b/tools.c @@ -198,29 +198,21 @@ cAddEventThread::~cAddEventThread(void) void cAddEventThread::Action(void) { SetPriority(19); - cList *tmplist = new cList; while (Running() && !LastHandleEvent.TimedOut()) { + cAddEventListItem *e = NULL; + cSchedulesLock SchedulesLock(true, 10); + cSchedules *schedules = (cSchedules *)cSchedules::Schedules(SchedulesLock); Lock(); - cAddEventListItem *e = list->First(); - while (e) { - tmplist->Add(new cAddEventListItem(e->GetEvent(), e->GetChannelID())); + while (schedules && (e = list->First()) != NULL) { + cSchedule *schedule = (cSchedule *)schedules->GetSchedule(Channels.GetByChannelID(e->GetChannelID()), true); + schedule->AddEvent(e->GetEvent()); + EpgHandlers.SortSchedule(schedule); + EpgHandlers.DropOutdated(schedule, e->GetEvent()->StartTime(), e->GetEvent()->EndTime(), e->GetEvent()->TableID(), e->GetEvent()->Version()); list->Del(e); - e = list->First(); } Unlock(); - e = tmplist->First(); - while (e) { - cSchedulesLock SchedulesLock(true, 10); - cSchedules *schedules = (cSchedules *)cSchedules::Schedules(SchedulesLock); - if (schedules) { - ((cSchedule *)schedules->GetSchedule(Channels.GetByChannelID(e->GetChannelID()), true))->AddEvent(e->GetEvent()); - tmplist->Del(e); - } - e = tmplist->First(); - } cCondWait::SleepMs(10); } - delete tmplist; } void cAddEventThread::AddEvent(cEvent *Event, tChannelID ChannelID) -- cgit v1.2.3