the flowing source code would cause assertion failed:
if (iter != m_impl->conn_map.end()) {
      ScopedLock conn_lock((*iter).second->mutex);
      if ((*iter).second->connected)
        do_close = true;
      else
        (*iter).second->connected = true;  // prevent further attempts
      m_impl->conn_map.erase(iter);
    }

because  the code line "m_impl->conn_map.erase(iter);" would destroy
the "(*iter).second->mutex", but the mutex would be in the "lock"
state. So in the
boost::mutex destruction, the assertion would failed.  it may use
another brace
to surround the "ScopedLock conn_lock((*iter).second->mutex);" to
solve the problem, just like:

if (iter != m_impl->conn_map.end()) {
    {   // added to solve the problem
      ScopedLock conn_lock((*iter).second->mutex);
      if ((*iter).second->connected)
        do_close = true;
      else
        (*iter).second->connected = true;  // prevent further attempts
    }  // added to solve the problem
      m_impl->conn_map.erase(iter);
    }

--

You received this message because you are subscribed to the Google Groups 
"Hypertable Development" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/hypertable-dev?hl=en.


Reply via email to