friend class wxConditionInternal;
 };
 
+#ifdef HAVE_PTHREAD_MUTEXATTR_T
+// on some systems pthread_mutexattr_settype() is not in the headers (but it is
+// in the library, otherwise we wouldn't compile this code at all)
+extern "C" int pthread_mutexattr_settype(pthread_mutexattr_t *, int);
+#endif
+
 wxMutexInternal::wxMutexInternal(wxMutexType mutexType)
 {
     int err;
             return wxSEMA_TIMEOUT;
         }
 
-        if ( m_cond.Wait(remainingTime) != wxCOND_NO_ERROR )
-            return wxSEMA_MISC_ERROR;
+        switch ( m_cond.WaitTimeout(remainingTime) )
+        {
+            case wxCOND_TIMEOUT:
+                return wxSEMA_TIMEOUT;
+
+            default:
+                return wxSEMA_MISC_ERROR;
+
+            case wxCOND_NO_ERROR:
+                ;
+        }
     }
 
     m_count--;
         wxString s;
         if ( file.ReadAll(&s) )
         {
-            // (ab)use Replace() to find the number of "processor" strings
-            size_t count = s.Replace(_T("processor"), _T(""));
+            // (ab)use Replace() to find the number of "processor: num" strings
+            size_t count = s.Replace(_T("processor\t:"), _T(""));
             if ( count > 0 )
             {
                 return count;