src/thread_pthread.cpp
changeset 10403 4925650db7ae
parent 10375 947e542f2bfc
child 10860 ae89867701fe
--- a/src/thread_pthread.cpp	Sun May 04 21:53:36 2008 +0000
+++ b/src/thread_pthread.cpp	Sun May 04 22:13:47 2008 +0000
@@ -104,6 +104,8 @@
 		pthread_join(m_thr, &ret);
 		m_thr = 0;
 
+		delete this;
+
 		return ret;
 	}
 
@@ -136,16 +138,22 @@
 		/* The new thread stops here so the calling thread can complete pthread_create() call */
 		sem_wait(&m_sem_start);
 
+		/* Did this thread die naturally/via exit, or did it join? */
+		bool exit = false;
+
 		/* Call the proc of the creator to continue this thread */
 		try {
 			m_proc(m_param);
 		} catch (...) {
+			exit = true;
 		}
 
 		/* Notify threads waiting for our completion */
 		sem_post(&m_sem_stop);
 
-		return NULL;
+		if (exit) delete this;
+
+		pthread_exit(NULL);
 	}
 };