[PATCH] Add an abstraction layer for threading in tests

Mike Hommey mh+jemalloc at glandium.org
Tue Apr 17 10:46:25 PDT 2012


From: Mike Hommey <mh at glandium.org>

---
 test/allocated.c             |   29 +++++++++--------------------
 test/jemalloc_test.h.in      |   20 ++++++++++++++++++++
 test/thread_arena.c          |   18 +++++-------------
 test/thread_tcache_enabled.c |   29 +++++++++--------------------
 4 files changed, 43 insertions(+), 53 deletions(-)

diff --git a/test/allocated.c b/test/allocated.c
index 81cd4ca..3f889f4 100644
--- a/test/allocated.c
+++ b/test/allocated.c
@@ -2,7 +2,6 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <stdbool.h>
-#include <pthread.h>
 #include <assert.h>
 #include <errno.h>
 #include <string.h>
@@ -11,7 +10,7 @@
 #include "jemalloc_test.h"
 
 void *
-thread_start(void *arg)
+je_thread_start(void *arg)
 {
 	int err;
 	void *p;
@@ -106,31 +105,21 @@ int
 main(void)
 {
 	int ret = 0;
-	pthread_t thread;
+	je_thread_t thread;
 
 	malloc_printf("Test begin\n");
 
-	thread_start(NULL);
+	je_thread_start(NULL);
 
-	if (pthread_create(&thread, NULL, thread_start, NULL)
-	    != 0) {
-		malloc_printf("%s(): Error in pthread_create()\n", __func__);
-		ret = 1;
-		goto label_return;
-	}
-	pthread_join(thread, (void *)&ret);
+	je_thread_create(&thread, je_thread_start, NULL);
+	je_thread_join(thread, (void *)&ret);
 
-	thread_start(NULL);
+	je_thread_start(NULL);
 
-	if (pthread_create(&thread, NULL, thread_start, NULL)
-	    != 0) {
-		malloc_printf("%s(): Error in pthread_create()\n", __func__);
-		ret = 1;
-		goto label_return;
-	}
-	pthread_join(thread, (void *)&ret);
+	je_thread_create(&thread, je_thread_start, NULL);
+	je_thread_join(thread, (void *)&ret);
 
-	thread_start(NULL);
+	je_thread_start(NULL);
 
 label_return:
 	malloc_printf("Test end\n");
diff --git a/test/jemalloc_test.h.in b/test/jemalloc_test.h.in
index 58fa08e..cb1a89a 100644
--- a/test/jemalloc_test.h.in
+++ b/test/jemalloc_test.h.in
@@ -5,3 +5,23 @@
  */
 #include "jemalloc/jemalloc at install_suffix@.h"
 #include "jemalloc/internal/jemalloc_internal.h"
+
+/* Abstraction layer for threading in tests */
+#include <pthread.h>
+
+typedef pthread_t je_thread_t;
+
+void
+je_thread_create(je_thread_t *thread, void *(*proc)(void *), void *arg)
+{
+	if (pthread_create(thread, NULL, proc, arg) != 0) {
+		malloc_printf("Error in pthread_create()\n");
+		exit(1);
+	}
+}
+
+void
+je_thread_join(je_thread_t thread, void **ret)
+{
+	pthread_join(thread, ret);
+}
diff --git a/test/thread_arena.c b/test/thread_arena.c
index e443b71..9835428 100644
--- a/test/thread_arena.c
+++ b/test/thread_arena.c
@@ -1,6 +1,5 @@
 #include <stdio.h>
 #include <stdlib.h>
-#include <pthread.h>
 #include <string.h>
 #include <assert.h>
 
@@ -10,7 +9,7 @@
 #define NTHREADS 10
 
 void *
-thread_start(void *arg)
+je_thread_start(void *arg)
 {
 	unsigned main_arena_ind = *(unsigned *)arg;
 	void *p;
@@ -52,7 +51,7 @@ main(void)
 	unsigned arena_ind;
 	size_t size;
 	int err;
-	pthread_t threads[NTHREADS];
+	je_thread_t threads[NTHREADS];
 	unsigned i;
 
 	malloc_printf("Test begin\n");
@@ -72,18 +71,11 @@ main(void)
 		goto label_return;
 	}
 
-	for (i = 0; i < NTHREADS; i++) {
-		if (pthread_create(&threads[i], NULL, thread_start,
-		    (void *)&arena_ind) != 0) {
-			malloc_printf("%s(): Error in pthread_create()\n",
-			    __func__);
-			ret = 1;
-			goto label_return;
-		}
-	}
+	for (i = 0; i < NTHREADS; i++)
+		je_thread_create(&threads[i], je_thread_start, (void *)&arena_ind);
 
 	for (i = 0; i < NTHREADS; i++)
-		pthread_join(threads[i], (void *)&ret);
+		je_thread_join(threads[i], (void *)&ret);
 
 label_return:
 	malloc_printf("Test end\n");
diff --git a/test/thread_tcache_enabled.c b/test/thread_tcache_enabled.c
index 59b76a2..e1cba43 100644
--- a/test/thread_tcache_enabled.c
+++ b/test/thread_tcache_enabled.c
@@ -1,7 +1,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
-#include <pthread.h>
 #include <assert.h>
 #include <errno.h>
 
@@ -9,7 +8,7 @@
 #include "jemalloc_test.h"
 
 void *
-thread_start(void *arg)
+je_thread_start(void *arg)
 {
 	int err;
 	size_t sz;
@@ -77,31 +76,21 @@ int
 main(void)
 {
 	int ret = 0;
-	pthread_t thread;
+	je_thread_t thread;
 
 	malloc_printf("Test begin\n");
 
-	thread_start(NULL);
+	je_thread_start(NULL);
 
-	if (pthread_create(&thread, NULL, thread_start, NULL)
-	    != 0) {
-		malloc_printf("%s(): Error in pthread_create()\n", __func__);
-		ret = 1;
-		goto label_return;
-	}
-	pthread_join(thread, (void *)&ret);
+	je_thread_create(&thread, je_thread_start, NULL);
+	je_thread_join(thread, (void *)&ret);
 
-	thread_start(NULL);
+	je_thread_start(NULL);
 
-	if (pthread_create(&thread, NULL, thread_start, NULL)
-	    != 0) {
-		malloc_printf("%s(): Error in pthread_create()\n", __func__);
-		ret = 1;
-		goto label_return;
-	}
-	pthread_join(thread, (void *)&ret);
+	je_thread_create(&thread, je_thread_start, NULL);
+	je_thread_join(thread, (void *)&ret);
 
-	thread_start(NULL);
+	je_thread_start(NULL);
 
 label_return:
 	malloc_printf("Test end\n");
-- 
1.7.10




More information about the jemalloc-discuss mailing list