On Fri, Apr 23, 2010 at 10:57 AM, Frank Mori Hess <frank.hess@nist.gov> wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Friday 23 April 2010, Ken Smith wrote:
> Periodically, the app stops responding.  When it does, I can see that the
> transmit() method is working fine, but the createRoom() and deleteRoom()
> methods (on separate threads, obviously) appear to be deadlocked on the
> highlighted lines, waiting to acquire their upgrade_locks.

> Am I doing something wrong?  Any suggestions on troubleshooting this?

Yes, they are deadlocked because both upgrade locks are waiting for the other
to release shared ownership so they can upgrade to unique ownership.

Perhaps I wasn't clear.  They're not waiting on the upgrade_to_unique_lock lines, but on the upgrade_lock lines.  So unless the upgrade_lock is automatically trying to acquire a unique lock (which would seem to go against the documentation, see http://www.boost.org/doc/libs/1_42_0/doc/html/thread/synchronization.html#thread.synchronization.locks.upgrade_to_unique_lock), that's not the behavior that I would expect.

Or am I missing something?  Is there a right way to do this that I've missed?  (I'm using the only example code I've been able to find, e.g., http://stackoverflow.com/questions/989795/example-for-boost-shared-mutex-multiple-reads-one-write).

Ken Smith