void XBPython::Process() { if (m_bInitialized) { PyList tmpvec; CSingleLock lock(m_vecPyList); for (PyList::iterator it = m_vecPyList.begin(); it != m_vecPyList.end();) { if (it->bDone) { tmpvec.push_back(*it); it = m_vecPyList.erase(it); m_vecPyList.hadSomethingRemoved = true; } else ++it; } lock.Leave(); //delete scripts which are done tmpvec.clear(); // boost releases the XBPyThreads which, if deleted, calls OnScriptFinalized CSingleLock l2(m_critSection); if(m_iDllScriptCounter == 0 && (XbmcThreads::SystemClockMillis() - m_endtime) > 10000 ) { Finalize(); } } }
void XBPython::FreeResources() { CSingleLock lock(m_critSection); if (m_bInitialized) { // with the m_critSection held, we should copy the PyList so that // we can operate on the values once we release it. PyList tmpvec = m_vecPyList; m_vecPyList.clear(); lock.Leave(); //unlock here because the python thread might lock when it exits // cleanup threads that are still running tmpvec.clear(); // boost releases the XBPyThreads which, if deleted, calls FinalizeScript } }
void XBPython::Process() { if (m_bLogin) { m_bLogin = false; // autoexec.py - profile CStdString strAutoExecPy = CSpecialProtocol::TranslatePath("special://profile/autoexec.py"); if ( XFILE::CFile::Exists(strAutoExecPy) ) evalFile(strAutoExecPy,ADDON::AddonPtr()); else CLog::Log(LOGDEBUG, "%s - no profile autoexec.py (%s) found, skipping", __FUNCTION__, strAutoExecPy.c_str()); } CSingleLock lock(m_vecPyList); if (m_bInitialized) { PyList tmpvec; for (PyList::iterator it = m_vecPyList.begin(); it != m_vecPyList.end();) { if (it->bDone) { tmpvec.push_back(*it); it = m_vecPyList.erase(it); } else it++; } lock.Leave(); //delete scripts which are done tmpvec.clear(); // boost releases the XBPyThreads which, if deleted, calls FinalizeScript CSingleLock l2(m_critSection); if(m_iDllScriptCounter == 0 && (XbmcThreads::SystemClockMillis() - m_endtime) > 10000 ) { Finalize(); } } }