[PATCH 10/11] Remove extra argument for malloc_tsd_cleanup_register

Mike Hommey mh+jemalloc at glandium.org
Wed Apr 18 09:29:49 PDT 2012


From: Mike Hommey <mh at glandium.org>

Bookkeeping an extra argument that actually only stores a function pointer
for a function we already have is not very useful.
---
 include/jemalloc/internal/tsd.h |   15 +++++----------
 src/tsd.c                       |    7 +++----
 2 files changed, 8 insertions(+), 14 deletions(-)

diff --git a/include/jemalloc/internal/tsd.h b/include/jemalloc/internal/tsd.h
index db6b1a6..8f671a2 100644
--- a/include/jemalloc/internal/tsd.h
+++ b/include/jemalloc/internal/tsd.h
@@ -4,11 +4,7 @@
 /* Maximum number of malloc_tsd users with cleanup functions. */
 #define	MALLOC_TSD_CLEANUPS_MAX	8
 
-typedef struct malloc_tsd_cleanup_s malloc_tsd_cleanup_t;
-struct malloc_tsd_cleanup_s {
-	bool	(*f)(void *);
-	void	*arg;
-};
+typedef bool (*malloc_tsd_cleanup_t)(void);
 
 /*
  * TLS/TSD-agnostic macro-based implementation of thread-specific data.  There
@@ -110,13 +106,12 @@ a_attr bool		a_name##_booted = false;
     a_cleanup)								\
 /* Initialization/cleanup. */						\
 a_attr bool								\
-a_name##_tsd_cleanup_wrapper(void *arg)					\
+a_name##_tsd_cleanup_wrapper(void)					\
 {									\
-	bool (*cleanup)(void *) = arg;					\
 									\
 	if (a_name##_initialized) {					\
 		a_name##_initialized = false;				\
-		cleanup(&a_name##_tls);					\
+		a_cleanup(&a_name##_tls);					\
 	}								\
 	return (a_name##_initialized);					\
 }									\
@@ -126,7 +121,7 @@ a_name##_tsd_boot(void)							\
 									\
 	if (a_cleanup != malloc_tsd_no_cleanup) {			\
 		malloc_tsd_cleanup_register(				\
-		    &a_name##_tsd_cleanup_wrapper, a_cleanup);		\
+		    &a_name##_tsd_cleanup_wrapper);			\
 	}								\
 	a_name##_booted = true;						\
 	return (false);							\
@@ -290,7 +285,7 @@ a_name##_tsd_set(a_type *val)						\
 void	*malloc_tsd_malloc(size_t size);
 void	malloc_tsd_dalloc(void *wrapper);
 void	malloc_tsd_no_cleanup(void *);
-void	malloc_tsd_cleanup_register(bool (*f)(void *), void *arg);
+void	malloc_tsd_cleanup_register(bool (*f)(void));
 void	malloc_tsd_boot(void);
 
 #endif /* JEMALLOC_H_EXTERNS */
diff --git a/src/tsd.c b/src/tsd.c
index 0838dc8..8e5e716 100644
--- a/src/tsd.c
+++ b/src/tsd.c
@@ -45,7 +45,7 @@ _malloc_thread_cleanup(void)
 		again = false;
 		for (i = 0; i < ncleanups; i++) {
 			if (pending[i]) {
-				pending[i] = cleanups[i].f(cleanups[i].arg);
+				pending[i] = cleanups[i]();
 				if (pending[i])
 					again = true;
 			}
@@ -55,12 +55,11 @@ _malloc_thread_cleanup(void)
 #endif
 
 void
-malloc_tsd_cleanup_register(bool (*f)(void *), void *arg)
+malloc_tsd_cleanup_register(bool (*f)(void))
 {
 
 	assert(ncleanups < MALLOC_TSD_CLEANUPS_MAX);
-	cleanups[ncleanups].f = f;
-	cleanups[ncleanups].arg = arg;
+	cleanups[ncleanups] = f;
 	ncleanups++;
 }
 
-- 
1.7.10




More information about the jemalloc-discuss mailing list