Bug #2517 » skinflatplus_locking.patch
| baserender.c | ||
|---|---|---|
|
#include <ft2build.h>
|
||
|
#include FT_FREETYPE_H
|
||
|
#if VDRVERSNUM >= 20301
|
||
|
#include <vdr/thread.h>
|
||
|
class cRecCounter : public cThread
|
||
|
{
|
||
|
private:
|
||
|
int numRec;
|
||
|
cCondWait condWait;
|
||
|
cRecCounter() { numRec = 0; }
|
||
|
protected:
|
||
|
void Action(void) {
|
||
|
LOCK_TIMERS_READ;
|
||
|
for(const cTimer *ti = Timers->First(); ti; ti = Timers->Next(ti)) {
|
||
|
if( ti->HasFlags(tfRecording) ) numRec++;
|
||
|
}
|
||
|
condWait.Signal();
|
||
|
}
|
||
|
public:
|
||
|
static int Count(void) {
|
||
|
cRecCounter rc;
|
||
|
rc.Start();
|
||
|
if(rc.condWait.Wait(500))
|
||
|
return rc.numRec;
|
||
|
return 0;
|
||
|
}
|
||
|
};
|
||
|
#endif
|
||
|
cFlatBaseRender::cFlatBaseRender(void) {
|
||
|
font = cFont::CreateFont(Setup.FontOsd, Setup.FontOsdSize );
|
||
|
fontSml = cFont::CreateFont(Setup.FontSml, Setup.FontSmlSize);
|
||
| ... | ... | |
|
if( Config.TopBarRecordingShow ) {
|
||
|
// look for timers
|
||
|
#if VDRVERSNUM >= 20301
|
||
|
LOCK_TIMERS_READ;
|
||
|
for(const cTimer *ti = Timers->First(); ti; ti = Timers->Next(ti)) {
|
||
|
numRec = cRecCounter::Count();
|
||
|
#else
|
||
|
for(cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti)) {
|
||
|
for(cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
|
||
|
if( ti->HasFlags(tfRecording) ) numRec++;
|
||
|
#endif
|
||
|
if( ti->HasFlags(tfRecording) ) {
|
||
|
numRec++;
|
||
|
}
|
||
|
}
|
||
|
if( numRec ) {
|
||
|
imgRec = imgLoader.LoadIcon("topbar_timer", topBarFontHeight - marginItem*2, topBarFontHeight - marginItem*2);
|
||
|
if( imgRec ) {
|
||
|
-- a/displaymenu.c
|
||
|
++ b/displaymenu.c
|
||
| ... | ... | |
|
//check if remotetimers plugin is available
|
||
|
static cPlugin* pRemoteTimers = cPluginManager::GetPlugin("remotetimers");
|
||
|
#if VDRVERSNUM >= 20301
|
||
|
LOCK_SCHEDULES_READ;
|
||
|
#else
|
||
|
cSchedulesLock SchedulesLock;
|
||
|
const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock);
|
||
|
#endif
|
||
|
time_t now;
|
||
|
time(&now);
|
||
|
if( (Config.MainMenuWidgetActiveTimerShowRemoteActive || Config.MainMenuWidgetActiveTimerShowRemoteRecording) && pRemoteTimers && (now - remoteTimersLastRefresh) > Config.MainMenuWidgetActiveTimerShowRemoteRefreshTime ) {
|
||
| ... | ... | |
|
if( timerRec.Size() + timerActive.Size() >= Config.MainMenuWidgetActiveTimerMaxCount )
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
#if VDRVERSNUM >= 20301
|
||
|
LOCK_SCHEDULES_READ;
|
||
|
#else
|
||
|
cSchedulesLock SchedulesLock;
|
||
|
const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock);
|
||
|
#endif
|
||
|
if( (Config.MainMenuWidgetActiveTimerShowRemoteActive || Config.MainMenuWidgetActiveTimerShowRemoteRecording) && pRemoteTimers &&
|
||
|
timerRec.Size() + timerActive.Size() < Config.MainMenuWidgetActiveTimerMaxCount ) {
|
||
|
cTimer* remoteTimer = NULL;
|
||