driver/record.cpp, driver/scanepg.cpp, zapit/src/zapit.cpp: try to prevent race

while lock/allocate frontend in case of possible concurrent usage in neutrino and zapit threads
This commit is contained in:
[CST] Focus
2013-08-12 16:05:20 +04:00
parent 79845b8fe2
commit cdb0e0ef21
3 changed files with 27 additions and 14 deletions

View File

@@ -1621,6 +1621,8 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend *
if(live_channel_id != channel_id) {
/* first try to get frontend for record with locked live */
bool unlock = true;
/* executed in neutrino thread - possible race with zap NOWAIT and epg scan zap */
CFEManager::getInstance()->Lock();
CFEManager::getInstance()->lockFrontend(live_fe);
frontend = CFEManager::getInstance()->allocateFE(channel, true);
if (frontend == NULL) {
@@ -1629,6 +1631,8 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend *
CFEManager::getInstance()->unlockFrontend(live_fe);
frontend = CFEManager::getInstance()->allocateFE(channel, true);
}
CFEManager::getInstance()->Unlock();
if (frontend == NULL)
return false;