From caf9c1f552ea54181dad4000d64bb85e19fabb58 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 6 Mar 2013 23:31:20 -0800 Subject: [PATCH] Need to do this too. --- src/cpp/websocketpp/src/messages/data.hpp | 35 ++++++++++++----------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/cpp/websocketpp/src/messages/data.hpp b/src/cpp/websocketpp/src/messages/data.hpp index 26292bac3..ff1b02bdc 100644 --- a/src/cpp/websocketpp/src/messages/data.hpp +++ b/src/cpp/websocketpp/src/messages/data.hpp @@ -82,9 +82,9 @@ public: * pointer. */ element_ptr get() { - boost::lock_guard lock(m_lock); - - element_ptr p, q; + element_ptr p, q; + { + boost::lock_guard lock(m_lock); /*std::cout << "message requested (" << m_cur_elements-m_avaliable.size() @@ -93,26 +93,27 @@ public: << ")" << std::endl;*/ - if (!m_avaliable.empty()) { - p = m_avaliable.front(); - q = p; - m_avaliable.pop(); // FIXME can call intrusive_ptr_release(line 217) which can deadlock - m_used[p->get_index()] = p; - } else { - if (m_cur_elements == m_max_elements) { - return element_ptr(); - } + if (!m_avaliable.empty()) { + p = m_avaliable.front(); + q = p; + m_avaliable.pop(); // FIXME can call intrusive_ptr_release(line 217) which can deadlock + m_used[p->get_index()] = p; + } else { + if (m_cur_elements == m_max_elements) { + return element_ptr(); + } - p = element_ptr(new element_type(type::shared_from_this(),m_cur_elements)); - m_cur_elements++; - m_used.push_back(p); + p = element_ptr(new element_type(type::shared_from_this(),m_cur_elements)); + m_cur_elements++; + m_used.push_back(p); /*std::cout << "Allocated new data message. Count is now " << m_cur_elements << std::endl;*/ - } + } - p->set_live(); + p->set_live(); + } return p; } void recycle(element_ptr p) {