
Hi, I think there's a minor mistake in the template code for interprocess_condition::wait. ***** Begin example ***** using namespace boost::interprocess; #ifdef USE_RECURSIVE typedef interprocess_recursive_mutex MutexT; #else typedef interprocess_mutex MutexT; #endif MutexT mutex; scoped_lock<MutexT> lock(mutex); interprocess_condition condition; condition.wait(lock); // compilation error when USE_RECURSIVE is defined ***** End example ***** Here, wait() is templated on the lock type; but this calls do_wait(), which requires interprocess_mutex. Is there a reason why do_wait() cannot accept a recursive mutex? The attached diff contains one possible solution: - Template do_wait() on the mutex type. - Add "friend class interprocess_condition" to the recursive mutex (as it is in the nonrecursive mutex). This seems to work on my computer (with POSIX_SHARED_MEMORY_OBJECTS); it has't been tested with the POSIX emulation. Thanks, Daniel