diff options
author | Nick Mathewson <nickm@torproject.org> | 2005-10-03 20:20:38 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2005-10-03 20:20:38 +0000 |
commit | c5ee3e961ef1556ed62449211adf9db6ef5150ca (patch) | |
tree | 77bd69d9ee2fe57923ba2c83d753324c6003a389 | |
parent | 9e54e2e2931a4c86ff13b70a8a04024f83cd67a2 (diff) | |
download | tor-c5ee3e961ef1556ed62449211adf9db6ef5150ca.tar.gz tor-c5ee3e961ef1556ed62449211adf9db6ef5150ca.zip |
Reorganize some quick-and-dirty code to find out what openssl stuff is leaking, using dmalloc.
svn:r5178
-rw-r--r-- | src/common/util.c | 16 | ||||
-rw-r--r-- | src/common/util.h | 24 | ||||
-rw-r--r-- | src/or/main.c | 14 |
3 files changed, 33 insertions, 21 deletions
diff --git a/src/common/util.c b/src/common/util.c index 07e26d85f4..b2457a4f3b 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -96,7 +96,7 @@ const char util_c_id[] = "$Id$"; * ===== */ #ifdef USE_DMALLOC #include <dmalloc.h> - #define DMALLOC_FN_ARGS file, line, + #define DMALLOC_FN_ARGS , file, line #else #define dmalloc_strdup(file, line, string, xalloc_b) strdup(string) @@ -116,7 +116,7 @@ const char util_c_id[] = "$Id$"; * ignored otherwise. */ void * -_tor_malloc(DMALLOC_PARAMS size_t size) +_tor_malloc(size_t size DMALLOC_PARAMS) { void *result; @@ -141,9 +141,9 @@ _tor_malloc(DMALLOC_PARAMS size_t size) * the process on error. (Same as calloc(size,1), but never returns NULL.) */ void * -_tor_malloc_zero(DMALLOC_PARAMS size_t size) +_tor_malloc_zero(size_t size DMALLOC_PARAMS) { - void *result = _tor_malloc(DMALLOC_FN_ARGS size); + void *result = _tor_malloc(size DMALLOC_FN_ARGS); memset(result, 0, size); return result; } @@ -153,7 +153,7 @@ _tor_malloc_zero(DMALLOC_PARAMS size_t size) * terminate. (Like realloc(ptr,size), but never returns NULL.) */ void * -_tor_realloc(DMALLOC_PARAMS void *ptr, size_t size) +_tor_realloc(void *ptr, size_t size DMALLOC_PARAMS) { void *result; @@ -170,7 +170,7 @@ _tor_realloc(DMALLOC_PARAMS void *ptr, size_t size) * NULL.) */ char * -_tor_strdup(DMALLOC_PARAMS const char *s) +_tor_strdup(const char *s DMALLOC_PARAMS) { char *dup; tor_assert(s); @@ -190,11 +190,11 @@ _tor_strdup(DMALLOC_PARAMS const char *s) * NULL.) */ char * -_tor_strndup(DMALLOC_PARAMS const char *s, size_t n) +_tor_strndup(const char *s, size_t n DMALLOC_PARAMS) { char *dup; tor_assert(s); - dup = _tor_malloc(DMALLOC_FN_ARGS n+1); + dup = _tor_malloc((n+1) DMALLOC_FN_ARGS); /* Performance note: Ordinarily we prefer strlcpy to strncpy. But * this function gets called a whole lot, and platform strncpy is * much faster than strlcpy when strlen(s) is much longer than n. diff --git a/src/common/util.h b/src/common/util.h index e644940b82..786a3eee9a 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -48,8 +48,8 @@ #endif #ifdef USE_DMALLOC -#define DMALLOC_PARAMS const char *file, const int line, -#define DMALLOC_ARGS _SHORT_FILE_, __LINE__, +#define DMALLOC_PARAMS , const char *file, const int line +#define DMALLOC_ARGS , _SHORT_FILE_, __LINE__ #else #define DMALLOC_PARAMS #define DMALLOC_ARGS @@ -61,11 +61,11 @@ #define tor_fragile_assert() /* Memory management */ -void *_tor_malloc(DMALLOC_PARAMS size_t size); -void *_tor_malloc_zero(DMALLOC_PARAMS size_t size); -void *_tor_realloc(DMALLOC_PARAMS void *ptr, size_t size); -char *_tor_strdup(DMALLOC_PARAMS const char *s); -char *_tor_strndup(DMALLOC_PARAMS const char *s, size_t n); +void *_tor_malloc(size_t size DMALLOC_PARAMS); +void *_tor_malloc_zero(size_t size DMALLOC_PARAMS); +void *_tor_realloc(void *ptr, size_t size DMALLOC_PARAMS); +char *_tor_strdup(const char *s DMALLOC_PARAMS); +char *_tor_strndup(const char *s, size_t n DMALLOC_PARAMS); #ifdef USE_DMALLOC extern int dmalloc_free(const char *file, const int line, void *pnt, const int func_id); @@ -79,11 +79,11 @@ extern int dmalloc_free(const char *file, const int line, void *pnt, #define tor_free(p) do { if (p) {free(p); (p)=NULL;} } while (0) #endif -#define tor_malloc(size) _tor_malloc(DMALLOC_ARGS size) -#define tor_malloc_zero(size) _tor_malloc_zero(DMALLOC_ARGS size) -#define tor_realloc(ptr, size) _tor_realloc(DMALLOC_ARGS ptr, size) -#define tor_strdup(s) _tor_strdup(DMALLOC_ARGS s) -#define tor_strndup(s, n) _tor_strndup(DMALLOC_ARGS s, n) +#define tor_malloc(size) _tor_malloc(size DMALLOC_ARGS) +#define tor_malloc_zero(size) _tor_malloc_zero(size DMALLOC_ARGS) +#define tor_realloc(ptr, size) _tor_realloc(ptr, size DMALLOC_ARGS) +#define tor_strdup(s) _tor_strdup(s DMALLOC_ARGS) +#define tor_strndup(s, n) _tor_strndup(s, n DMALLOC_ARGS) /* String manipulation */ #define HEX_CHARACTERS "0123456789ABCDEFabcdef" diff --git a/src/or/main.c b/src/or/main.c index 16a3671877..8cf0032cf7 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -1907,10 +1907,23 @@ nt_strerror(uint32_t errnum) } #endif +#ifdef USE_DMALLOC +#include <openssl/crypto.h> +static void +_tor_dmalloc_free(void *p) +{ + tor_free(p); +} +#endif + /** DOCDOC */ int tor_main(int argc, char *argv[]) { +#ifdef USE_DMALLOC + int r = CRYPTO_set_mem_ex_functions(_tor_malloc, _tor_realloc, _tor_dmalloc_free); + log_fn(LOG_NOTICE, "r = %d", r); +#endif #ifdef MS_WINDOWS_SERVICE backup_argv = argv; backup_argc = argc; @@ -1963,4 +1976,3 @@ tor_main(int argc, char *argv[]) tor_cleanup(); return -1; } - |