diff --git a/src/util/container.h b/src/util/container.h index 7945df54b7c8703a4389e32c462bc2115c1b451f..936c46d6111b8f69ef7ebffa6ad9f16ee7548371 100644 --- a/src/util/container.h +++ b/src/util/container.h @@ -200,12 +200,12 @@ class MutexedQueue bool empty() { JMutexAutoLock lock(m_mutex); - return (m_size.GetValue() == 0); + return (m_queue.size() == 0); } void push_back(T t) { JMutexAutoLock lock(m_mutex); - m_list.push_back(t); + m_queue.push_back(t); m_size.Post(); } @@ -214,34 +214,28 @@ class MutexedQueue */ T pop_frontNoEx(u32 wait_time_max_ms) { - if (m_size.Wait(wait_time_max_ms)) - { + if (m_size.Wait(wait_time_max_ms)) { JMutexAutoLock lock(m_mutex); - typename std::list<T>::iterator begin = m_list.begin(); - T t = *begin; - m_list.erase(begin); + T t = m_queue.front(); + m_queue.pop_front(); return t; } - else - { + else { return T(); } } T pop_front(u32 wait_time_max_ms) { - if (m_size.Wait(wait_time_max_ms)) - { + if (m_size.Wait(wait_time_max_ms)) { JMutexAutoLock lock(m_mutex); - typename std::list<T>::iterator begin = m_list.begin(); - T t = *begin; - m_list.erase(begin); + T t = m_queue.front(); + m_queue.pop_front(); return t; } - else - { + else { throw ItemNotFoundException("MutexedQueue: queue is empty"); } } @@ -252,26 +246,21 @@ class MutexedQueue JMutexAutoLock lock(m_mutex); - typename std::list<T>::iterator begin = m_list.begin(); - T t = *begin; - m_list.erase(begin); + T t = m_queue.front(); + m_queue.pop_front(); return t; } T pop_back(u32 wait_time_max_ms=0) { - if (m_size.Wait(wait_time_max_ms)) - { + if (m_size.Wait(wait_time_max_ms)) { JMutexAutoLock lock(m_mutex); - typename std::list<T>::iterator last = m_list.end(); - last--; - T t = *last; - m_list.erase(last); + T t = m_queue.back(); + m_queue.pop_back(); return t; } - else - { + else { throw ItemNotFoundException("MutexedQueue: queue is empty"); } } @@ -281,18 +270,14 @@ class MutexedQueue */ T pop_backNoEx(u32 wait_time_max_ms=0) { - if (m_size.Wait(wait_time_max_ms)) - { + if (m_size.Wait(wait_time_max_ms)) { JMutexAutoLock lock(m_mutex); - typename std::list<T>::iterator last = m_list.end(); - last--; - T t = *last; - m_list.erase(last); + T t = m_queue.back(); + m_queue.pop_back(); return t; } - else - { + else { return T(); } } @@ -303,10 +288,8 @@ class MutexedQueue JMutexAutoLock lock(m_mutex); - typename std::list<T>::iterator last = m_list.end(); - last--; - T t = *last; - m_list.erase(last); + T t = m_queue.back(); + m_queue.pop_back(); return t; } @@ -316,15 +299,13 @@ class MutexedQueue return m_mutex; } - // NEVER EVER modify the >>list<< you got by using this function! - // You may only modify it's content - std::list<T> & getList() + std::deque<T> & getQueue() { - return m_list; + return m_queue; } + std::deque<T> m_queue; JMutex m_mutex; - std::list<T> m_list; JSemaphore m_size; }; diff --git a/src/util/thread.h b/src/util/thread.h index 8b3c33621c494f3b5f2b7d73a1635c6372a6cad9..eda9c0ca2021193fe1ebdb912aabbea221311ac9 100644 --- a/src/util/thread.h +++ b/src/util/thread.h @@ -130,9 +130,9 @@ class RequestQueue /* If the caller is already on the list, only update CallerData */ - for(typename std::list< GetRequest<Key, T, Caller, CallerData> >::iterator - i = m_queue.getList().begin(); - i != m_queue.getList().end(); ++i) + for(typename std::deque< GetRequest<Key, T, Caller, CallerData> >::iterator + i = m_queue.getQueue().begin(); + i != m_queue.getQueue().end(); ++i) { GetRequest<Key, T, Caller, CallerData> &request = *i;