Showing the changes to codec/common/src/WelsThreadPool.cpp (1 of 16 files). Show all
Unified · Split
| @@ -46,6 +46,7 @@ namespace WelsCommon { · 45 unmodified lines | ||
| 46 | 46 | int32_t CWelsThreadPool::m_iRefCount = 0; |
| 47 | 47 | CWelsLock CWelsThreadPool::m_cInitLock; |
| 48 | 48 | int32_t CWelsThreadPool::m_iMaxThreadNum = DEFAULT_THREAD_NUM; |
| 49 | +CWelsThreadPool* CWelsThreadPool::m_pThreadPoolSelf = NULL; | |
| 49 | 50 | |
| 50 | 51 | CWelsThreadPool::CWelsThreadPool() : |
| 51 | 52 | m_cWaitedTasks (NULL), m_cIdleThreads (NULL), m_cBusyThreads (NULL) { |
| @@ -75,13 +76,21 @@ WELS_THREAD_ERROR_CODE CWelsThreadPool::SetThreadNum (int32_t iMaxThreadNum) { · 23 unmodified lines | ||
| 75 | 76 | } |
| 76 | 77 | |
| 77 | 78 | |
| 78 | −CWelsThreadPool& CWelsThreadPool::AddReference () { | |
| 79 | +CWelsThreadPool* CWelsThreadPool::AddReference() { | |
| 79 | 80 | CWelsAutoLock cLock (m_cInitLock); |
| 80 | − static CWelsThreadPool m_cThreadPoolSelf; | |
| 81 | + if (m_pThreadPoolSelf == NULL) { | |
| 82 | + m_pThreadPoolSelf = new CWelsThreadPool(); | |
| 83 | + if (!m_pThreadPoolSelf) { | |
| 84 | + return NULL; | |
| 85 | + } | |
| 86 | + } | |
| 87 | + | |
| 81 | 88 | if (m_iRefCount == 0) { |
| 82 | − //TODO: will remove this afterwards | |
| 83 | − if (WELS_THREAD_ERROR_OK != m_cThreadPoolSelf.Init()) { | |
| 84 | − m_cThreadPoolSelf.Uninit(); | |
| 89 | + if (WELS_THREAD_ERROR_OK != m_pThreadPoolSelf->Init()) { | |
| 90 | + m_pThreadPoolSelf->Uninit(); | |
| 91 | + delete m_pThreadPoolSelf; | |
| 92 | + m_pThreadPoolSelf = NULL; | |
| 93 | + return NULL; | |
| 85 | 94 | } |
| 86 | 95 | } |
| 87 | 96 | |
| @@ -89,7 +98,7 @@ CWelsThreadPool& CWelsThreadPool::AddReference () { · 1 unmodified line | ||
| 89 | 98 | |
| 90 | 99 | ++ m_iRefCount; |
| 91 | 100 | //fprintf(stdout, "m_iRefCount2=%d\n", m_iRefCount); |
| 92 | − return m_cThreadPoolSelf; | |
| 101 | + return m_pThreadPoolSelf; | |
| 93 | 102 | } |
| 94 | 103 | |
| 95 | 104 | void CWelsThreadPool::RemoveInstance() { |
| @@ -99,6 +108,10 @@ void CWelsThreadPool::RemoveInstance() { · 3 unmodified lines | ||
| 99 | 108 | if (0 == m_iRefCount) { |
| 100 | 109 | StopAllRunning(); |
| 101 | 110 | Uninit(); |
| 111 | + if (m_pThreadPoolSelf) { | |
| 112 | + delete m_pThreadPoolSelf; | |
| 113 | + m_pThreadPoolSelf = NULL; | |
| 114 | + } | |
| 102 | 115 | //fprintf(stdout, "m_iRefCount=%d, IdleThreadNum=%d, BusyThreadNum=%d, WaitedTask=%d\n", m_iRefCount, GetIdleThreadNum(), GetBusyThreadNum(), GetWaitedTaskNum()); |
| 103 | 116 | } |
| 104 | 117 | } |
| @@ -106,7 +119,7 @@ void CWelsThreadPool::RemoveInstance() { · 1 unmodified line | ||
| 106 | 119 | |
| 107 | 120 | bool CWelsThreadPool::IsReferenced() { |
| 108 | 121 | CWelsAutoLock cLock (m_cInitLock); |
| 109 | − return (m_iRefCount>0); | |
| 122 | + return (m_iRefCount > 0); | |
| 110 | 123 | } |
| 111 | 124 | |
| 112 | 125 | |
| @@ -137,7 +150,7 @@ WELS_THREAD_ERROR_CODE CWelsThreadPool::OnTaskStop (CWelsTaskThread* pThread, IW · 24 unmodified lines | ||
| 137 | 150 | return WELS_THREAD_ERROR_OK; |
| 138 | 151 | } |
| 139 | 152 | |
| 140 | −WELS_THREAD_ERROR_CODE CWelsThreadPool::Init () { | |
| 153 | +WELS_THREAD_ERROR_CODE CWelsThreadPool::Init() { | |
| 141 | 154 | //fprintf(stdout, "Enter WelsThreadPool Init\n"); |
| 142 | 155 | |
| 143 | 156 | CWelsAutoLock cLock (m_cLockPool); |
| @@ -197,9 +210,9 @@ WELS_THREAD_ERROR_CODE CWelsThreadPool::Uninit() { · 53 unmodified lines | ||
| 197 | 210 | |
| 198 | 211 | Kill(); |
| 199 | 212 | |
| 200 | − WELS_DELETE_OP(m_cWaitedTasks); | |
| 201 | − WELS_DELETE_OP(m_cIdleThreads); | |
| 202 | − WELS_DELETE_OP(m_cBusyThreads); | |
| 213 | + WELS_DELETE_OP (m_cWaitedTasks); | |
| 214 | + WELS_DELETE_OP (m_cIdleThreads); | |
| 215 | + WELS_DELETE_OP (m_cBusyThreads); | |
| 203 | 216 | |
| 204 | 217 | return iReturn; |
| 205 | 218 | } |
| @@ -234,8 +247,8 @@ WELS_THREAD_ERROR_CODE CWelsThreadPool::QueueTask (IWelsTask* pTask) { · 28 unmodified lines | ||
| 234 | 247 | } |
| 235 | 248 | } |
| 236 | 249 | //fprintf(stdout, "ThreadPool: AddTaskToWaitedList: %x\n", pTask); |
| 237 | − if (false == AddTaskToWaitedList (pTask)){ | |
| 238 | − return WELS_THREAD_ERROR_GENERAL; | |
| 250 | + if (false == AddTaskToWaitedList (pTask)) { | |
| 251 | + return WELS_THREAD_ERROR_GENERAL; | |
| 239 | 252 | } |
| 240 | 253 | |
| 241 | 254 | //fprintf(stdout, "ThreadPool: SignalThread: %x\n", pTask); |
| @@ -261,7 +274,7 @@ WELS_THREAD_ERROR_CODE CWelsThreadPool::CreateIdleThread() { · 19 unmodified lines | ||
| 261 | 274 | |
| 262 | 275 | void CWelsThreadPool::DestroyThread (CWelsTaskThread* pThread) { |
| 263 | 276 | pThread->Kill(); |
| 264 | − WELS_DELETE_OP(pThread); | |
| 277 | + WELS_DELETE_OP (pThread); | |
| 265 | 278 | |
| 266 | 279 | return; |
| 267 | 280 | } |
| @@ -292,7 +305,7 @@ bool CWelsThreadPool::AddTaskToWaitedList (IWelsTask* pTask) { · 24 unmodified lines | ||
| 292 | 305 | |
| 293 | 306 | int32_t nRet = m_cWaitedTasks->push_back (pTask); |
| 294 | 307 | //fprintf(stdout, "CWelsThreadPool::AddTaskToWaitedList=%d, pTask=%x\n", m_cWaitedTasks->size(), pTask); |
| 295 | − return (0==nRet ? true : false); | |
| 308 | + return (0 == nRet ? true : false); | |
| 296 | 309 | } |
| 297 | 310 | |
| 298 | 311 | CWelsTaskThread* CWelsThreadPool::GetIdleThread() { |