Boost logo

Boost :

From: Steven Watanabe (steven_at_[hidden])
Date: 2007-01-09 15:29:04


AMDG

Andrey Semashev wrote:
> Right, thanks for finding this. I'll try to fix it. I guess, I'll have
> to create a global mutex object for the assignment operations and lock
> it prior to other two locks and assignment.
I think that this works:
  locking_state_machine& operator= (locking_state_machine const& that)
  {
    if(boost::addressof(that) != this) {
      const bool lock_this_first = boost::addressof(m_Mutex) <
boost::addressof(that.m_Mutex);
      scoped_lock that_lock(lock_this_first? m_Mutex : that.m_Mutex);
      scoped_lock this_lock(lock_this_first? that.m_Mutex : m_Mutex);
      base_type::operator= (static_cast< base_type const& >(that));
    }
    return *this;
  }

In Christ,
Steven Watanabe


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk