Bug #2517 » skinflatplus_locking3.patch
| Makefile | ||
|---|---|---|
|
export CFLAGS = $(call PKGCFG,cflags)
|
||
|
export CXXFLAGS = $(call PKGCFG,cxxflags)
|
||
|
CXXFLAGS += -std=c++11
|
||
|
### Allow user defined options to overwrite defaults:
|
||
|
-include $(PLGCFG)
|
||
|
-- a/baserender.c
|
||
|
++ b/baserender.c
|
||
| ... | ... | |
|
#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;
|
||
|
}
|
||
|
};
|
||
|
#include <future>
|
||
|
#endif
|
||
|
cFlatBaseRender::cFlatBaseRender(void) {
|
||
| ... | ... | |
|
if( Config.TopBarRecordingShow ) {
|
||
|
// look for timers
|
||
|
#if VDRVERSNUM >= 20301
|
||
|
numRec = cRecCounter::Count();
|
||
|
auto recCounterFuture = std::async([&numRec](){
|
||
|
LOCK_TIMERS_READ;
|
||
|
for(const cTimer *ti = Timers->First(); ti; ti = Timers->Next(ti)) {
|
||
|
if( ti->HasFlags(tfRecording) ) numRec++;
|
||
|
}
|
||
|
});
|
||
|
recCounterFuture.get();
|
||
|
#else
|
||
|
for(cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
|
||
|
if( ti->HasFlags(tfRecording) ) numRec++;
|
||
|
-- a/displaymenu.c
|
||
|
++ b/displaymenu.c
|
||
| ... | ... | |
|
#include <fstream>
|
||
|
#include <iostream>
|
||
|
#if VDRVERSNUM >= 20301
|
||
|
#include <future>
|
||
|
#endif
|
||
|
#ifndef VDRLOGO
|
||
|
#define VDRLOGO "vdrlogo_default"
|
||
|
#endif
|
||
| ... | ... | |
|
if( Config.MenuRecordingView == 0 )
|
||
|
return false;
|
||
|
#if VDRVERSNUM >= 20301
|
||
|
LOCK_RECORDINGS_READ;
|
||
|
#endif
|
||
|
cString buffer;
|
||
|
cString RecName = GetRecordingName(Recording, Level, Total == 0).c_str();
|
||
| ... | ... | |
|
LastRecFolder = RecFolder;
|
||
|
if( RecFolder != "" && LastItemRecordingLevel > 0 ) {
|
||
|
#if VDRVERSNUM >= 20301
|
||
|
LOCK_RECORDINGS_READ;
|
||
|
for(const cRecording *Rec = Recordings->First(); Rec; Rec = Recordings->Next(Rec)) {
|
||
|
#else
|
||
|
for(cRecording *Rec = Recordings.First(); Rec; Rec = Recordings.Next(Rec)) {
|
||
| ... | ... | |
|
}
|
||
|
} else {
|
||
|
#if VDRVERSNUM >= 20301
|
||
|
LOCK_RECORDINGS_READ;
|
||
|
for(const cRecording *Rec = Recordings->First(); Rec; Rec = Recordings->Next(Rec)) {
|
||
|
#else
|
||
|
for(cRecording *Rec = Recordings.First(); Rec; Rec = Recordings.Next(Rec)) {
|
||
| ... | ... | |
|
// lent from skinelchi
|
||
|
if( Config.RecordingAdditionalInfoShow ) {
|
||
|
#if VDRVERSNUM >= 20301
|
||
|
LOCK_CHANNELS_READ;
|
||
|
const cChannel *channel = Channels->GetByChannelID(((cRecordingInfo *)recInfo)->ChannelID());
|
||
|
auto channelFuture = std::async([&recAdditional](tChannelID channelId){
|
||
|
LOCK_CHANNELS_READ;
|
||
|
const cChannel *channel = Channels->GetByChannelID(channelId);
|
||
|
if (channel)
|
||
|
recAdditional << trVDR("Channel") << ": " << channel->Number() << " - " << channel->Name() << endl;
|
||
|
}, recInfo->ChannelID());
|
||
|
channelFuture.get();
|
||
|
#else
|
||
|
cChannel *channel = Channels.GetByChannelID(((cRecordingInfo *)recInfo)->ChannelID());
|
||
|
#endif
|
||
|
if (channel)
|
||
|
recAdditional << trVDR("Channel") << ": " << channel->Number() << " - " << channel->Name() << endl;
|
||
|
recAdditional << trVDR("Channel") << ": " << channel->Number() << " - " << channel->Name() << endl;
|
||
|
#endif
|
||
|
const cEvent *Event = recInfo->GetEvent();
|
||
|
if( Event ) {
|
||
- « Previous
- 1
- …
- 4
- 5
- 6
- Next »