Просмотр исходного кода

improve asserts in Thread2, Mutex and Cond

mikymod 12 лет назад
Родитель
Сommit
682e6aa3a6
3 измененных файлов с 14 добавлено и 14 удалено
  1. 4 4
      engine/os/posix/Cond.h
  2. 4 4
      engine/os/posix/Mutex.h
  3. 6 6
      engine/os/posix/Thread2.h

+ 4 - 4
engine/os/posix/Cond.h

@@ -64,7 +64,7 @@ inline Cond::Cond()
 
 
 	int32_t result = pthread_cond_init(&m_cond, NULL);
 	int32_t result = pthread_cond_init(&m_cond, NULL);
 
 
-	CE_ASSERT(result == 0, "Failed to init cond");
+	CE_ASSERT(result == 0, "Failed to init cond. errno: %d", result);
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -72,7 +72,7 @@ inline Cond::~Cond()
 {
 {
 	int32_t result = pthread_cond_destroy(&m_cond);
 	int32_t result = pthread_cond_destroy(&m_cond);
 
 
-	CE_ASSERT(result == 0, "Failed to destroy cond");
+	CE_ASSERT(result == 0, "Failed to destroy cond. errno: %d", result);
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -80,7 +80,7 @@ inline void Cond::signal()
 {
 {
 	int32_t result = pthread_cond_signal(&m_cond);
 	int32_t result = pthread_cond_signal(&m_cond);
 
 
-	CE_ASSERT(result == 0, "Failed to signal cond");
+	CE_ASSERT(result == 0, "Failed to signal cond. errno: %d", result);
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -88,7 +88,7 @@ inline void Cond::wait(Mutex& mutex)
 {
 {
 	int32_t result = pthread_cond_wait(&m_cond, &(mutex.m_mutex));
 	int32_t result = pthread_cond_wait(&m_cond, &(mutex.m_mutex));
 
 
-	CE_ASSERT(result == 0, "Failed to wait cond");
+	CE_ASSERT(result == 0, "Failed to wait cond. errno: %d", result);
 }
 }
 
 
 } // namespace crown
 } // namespace crown

+ 4 - 4
engine/os/posix/Mutex.h

@@ -66,7 +66,7 @@ inline Mutex::Mutex()
 
 
 	int32_t result = pthread_mutex_init(&m_mutex, NULL);
 	int32_t result = pthread_mutex_init(&m_mutex, NULL);
 
 
-	CE_ASSERT(result == 0, "Failed to init mutex");
+	CE_ASSERT(result == 0, "Failed to init mutex. errno: %d", result);
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -74,7 +74,7 @@ inline Mutex::~Mutex()
 {
 {
 	int32_t result = pthread_mutex_destroy(&m_mutex);
 	int32_t result = pthread_mutex_destroy(&m_mutex);
 
 
-	CE_ASSERT(result == 0, "Failed to destroy mutex");
+	CE_ASSERT(result == 0, "Failed to destroy mutex. errno: %d", result);
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -82,7 +82,7 @@ inline void Mutex::lock()
 {
 {
 	int32_t result = pthread_mutex_lock(&m_mutex);
 	int32_t result = pthread_mutex_lock(&m_mutex);
 
 
-	CE_ASSERT(result == 0, "Failed to acquire lock");
+	CE_ASSERT(result == 0, "Failed to acquire lock. errno: %d", result);
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -90,7 +90,7 @@ inline void Mutex::unlock()
 {
 {
 	int32_t result = pthread_mutex_unlock(&m_mutex);
 	int32_t result = pthread_mutex_unlock(&m_mutex);
 
 
-	CE_ASSERT(result == 0, "Failed to release lock");
+	CE_ASSERT(result == 0, "Failed to release lock. errno: %d", result);
 }
 }
 
 
 } // namespace crown
 } // namespace crown

+ 6 - 6
engine/os/posix/Thread2.h

@@ -84,10 +84,6 @@ inline OsThread::OsThread(const char* name) :
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 inline OsThread::~OsThread()
 inline OsThread::~OsThread()
 {
 {
-	if (m_is_running)
-	{
-		stop();
-	}
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -102,6 +98,8 @@ inline void OsThread::start(OsThreadFunction func, void* data, size_t stack_size
 
 
 	pthread_attr_t attr;
 	pthread_attr_t attr;
 	int32_t result = pthread_attr_init(&attr);
 	int32_t result = pthread_attr_init(&attr);
+	pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
 
 
 	CE_ASSERT(result == 0, "pthread_attr_init failed. errno: %d", result);
 	CE_ASSERT(result == 0, "pthread_attr_init failed. errno: %d", result);
 
 
@@ -120,7 +118,7 @@ inline void OsThread::start(OsThreadFunction func, void* data, size_t stack_size
 
 
 	m_is_running = true;
 	m_is_running = true;
 
 
-	m_sem.wait();
+	// m_sem.wait();
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -146,7 +144,7 @@ inline bool OsThread::is_running()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 inline int32_t OsThread::run()
 inline int32_t OsThread::run()
 {
 {
-	m_sem.post();
+	// m_sem.post();
 	
 	
 	return m_function(m_data);
 	return m_function(m_data);
 }
 }
@@ -160,6 +158,8 @@ inline void* OsThread::thread_proc(void* arg)
 
 
 	CE_ASSERT(result == 0, "Function failed");
 	CE_ASSERT(result == 0, "Function failed");
 
 
+	thread->m_is_running = false;
+
 	return NULL;
 	return NULL;
 }
 }