--- qt-4.4.0.orig/src/corelib/thread/qmutex_unix.cpp 2008-04-28 09:11:18.000000000 -0400+++ qt-4.4.0/src/corelib/thread/qmutex_unix.cpp 2008-06-29 14:02:35.441137000 -0400@@ -63,8 +63,47 @@ QMutexPrivate::QMutexPrivate(QMutex::RecursionMode mode) : recursive(mode == QMutex::Recursive), contenders(0), owner(0), count(0), wakeup(false) {+#if defined(Q_OS_SOLARIS)+ pthread_mutexattr_t mutex_attr;+ pthread_condattr_t cond_attr;+ report_error(pthread_mutexattr_init(&mutex_attr),+ "QMutex", "mutex attr init");+ report_error(pthread_condattr_init(&cond_attr),+ "QMutex", "cond attr init");+ /* The default type for a pthread_mutexattr_t is+ * PTHREAD_PROCESS_PRIVATE.+ */+ report_error(pthread_mutexattr_setpshared(&mutex_attr,+ PTHREAD_PROCESS_SHARED),+ "QMutex", "mutex attr setpshared");++ /* The default type for a pthread_condattr_t is+ * PTHREAD_PROCESS_PRIVATE.+ */+ report_error(pthread_condattr_setpshared(&cond_attr,+ PTHREAD_PROCESS_SHARED),+ "QMutex", "cond attr setpshared");++ /* It is illegal to use a pthread_mutex_t with a type of+ * PTHREAD_MUTEX_RECURSIVE in conjunction with a pthread_cond_t.+ * A recursive pthread_mutex_t will not correctly perform the+ * implicit atomic pthread_mutex_lock/pthread_mutex_unlock+ * guaranteed by the implementation of pthread_cond_wait.+ * Therfore we enforce a pthread_mutexattr_t type of+ * PTHREAD_MUTEX_ERRORCHECK, and we do not use the default+ * pthread_mutexattr_t attributes.+ */+ report_error(pthread_mutexattr_settype(&mutex_attr,+ PTHREAD_MUTEX_ERRORCHECK),+ "QMutex", "mutex attr setttype");+ report_error(pthread_mutex_init(&mutex, &mutex_attr),+ "QMutex", "mutex init");+ report_error(pthread_cond_init(&cond, &cond_attr),+ "QMutex", "cond init");+#else report_error(pthread_mutex_init(&mutex, NULL), "QMutex", "mutex init"); report_error(pthread_cond_init(&cond, NULL), "QMutex", "cv init");+#endif } QMutexPrivate::~QMutexPrivate()