[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r16831: {tor} Fix more actual test leaks (tor/trunk/src/or)
Author: nickm
Date: 2008-09-10 01:34:03 -0400 (Wed, 10 Sep 2008)
New Revision: 16831
Modified:
tor/trunk/src/or/test.c
Log:
Fix more actual test leaks
Modified: tor/trunk/src/or/test.c
===================================================================
--- tor/trunk/src/or/test.c 2008-09-10 05:33:49 UTC (rev 16830)
+++ tor/trunk/src/or/test.c 2008-09-10 05:34:03 UTC (rev 16831)
@@ -2058,6 +2058,8 @@
static tor_mutex_t *_thread_test_start1 = NULL;
static tor_mutex_t *_thread_test_start2 = NULL;
static strmap_t *_thread_test_strmap = NULL;
+static char *_thread1_name = NULL;
+static char *_thread2_name = NULL;
static void _thread_test_func(void* _s) ATTR_NORETURN;
@@ -2067,31 +2069,36 @@
static void
_thread_test_func(void* _s)
{
+ /* This function runs in a subthread. It grabs its own mutex (start1 or
+ * start2) to make sure that it should start, then it repeatedly alters
+ * _test_thread_strmap protected by _thread_test_mutex. */
char *s = _s;
int i, *count;
tor_mutex_t *m;
char buf[64];
- char *cp;
+ char **cp;
if (!strcmp(s, "thread 1")) {
m = _thread_test_start1;
+ cp = &_thread1_name;
count = &t1_count;
} else {
m = _thread_test_start2;
+ cp = &_thread2_name;
count = &t2_count;
}
tor_mutex_acquire(m);
tor_snprintf(buf, sizeof(buf), "%lu", tor_get_thread_id());
- cp = tor_strdup(buf);
+ *cp = tor_strdup(buf);
for (i=0; i<10000; ++i) {
tor_mutex_acquire(_thread_test_mutex);
- strmap_set(_thread_test_strmap, "last to run", cp);
+ strmap_set(_thread_test_strmap, "last to run", *cp);
++*count;
tor_mutex_release(_thread_test_mutex);
}
tor_mutex_acquire(_thread_test_mutex);
- strmap_set(_thread_test_strmap, s, tor_strdup(buf));
+ strmap_set(_thread_test_strmap, s, *cp);
tor_mutex_release(_thread_test_mutex);
tor_mutex_release(m);
@@ -2102,7 +2109,7 @@
static void
test_util_threads(void)
{
- char *s1, *s2;
+ char *s1 = NULL, *s2 = NULL;
int done = 0, timedout = 0;
time_t started;
#ifndef TOR_IS_MULTITHREADED
@@ -2137,6 +2144,11 @@
}
tor_mutex_free(_thread_test_mutex);
+ tor_mutex_acquire(_thread_test_start1);
+ tor_mutex_release(_thread_test_start1);
+ tor_mutex_acquire(_thread_test_start2);
+ tor_mutex_release(_thread_test_start2);
+
if (timedout) {
printf("\nTimed out: %d %d", t1_count, t2_count);
test_assert(strmap_get(_thread_test_strmap, "thread 1"));
@@ -2152,12 +2164,17 @@
!strcmp(strmap_get(_thread_test_strmap, "thread 2"),
strmap_get(_thread_test_strmap, "last to run")));
- strmap_free(_thread_test_strmap, _tor_free);
-
+ done:
tor_free(s1);
tor_free(s2);
- done:
- ;
+ tor_free(_thread1_name);
+ tor_free(_thread2_name);
+ if (_thread_test_strmap)
+ strmap_free(_thread_test_strmap, NULL);
+ if (_thread_test_start1)
+ tor_mutex_free(_thread_test_start1);
+ if (_thread_test_start2)
+ tor_mutex_free(_thread_test_start2);
}
static int
@@ -3457,11 +3474,11 @@
test_policies(void)
{
int i;
- smartlist_t *policy, *policy2;
+ smartlist_t *policy = NULL, *policy2 = NULL;
addr_policy_t *p;
tor_addr_t tar;
config_line_t line;
- smartlist_t *sm;
+ smartlist_t *sm = NULL;
char *policy_str;
policy = smartlist_create();
@@ -3502,7 +3519,9 @@
test_assert(policy_is_reject_star(NULL));
addr_policy_list_free(policy);
+ policy = NULL;
addr_policy_list_free(policy2);
+ policy2 = NULL;
/* make sure compacting logic works. */
policy = NULL;
@@ -3516,6 +3535,7 @@
test_eq(smartlist_len(policy), 2);
addr_policy_list_free(policy);
+ policy = NULL;
/* test policy summaries */
/* check if we properly ignore private IP addresses */
@@ -3575,6 +3595,7 @@
"reject *:7,"
"accept *:*",
"reject 1,3,5,7");
+
/* truncation ports */
sm = smartlist_create();
for (i=1; i<2000; i+=2) {
@@ -3601,7 +3622,7 @@
"490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522");
tor_free(policy_str);
SMARTLIST_FOREACH(sm, char *, s, tor_free(s));
- smartlist_clear(sm);
+ smartlist_free(sm);
done:
;
}
@@ -3785,7 +3806,7 @@
test_assert(pool->new_chunk_capacity < 60);
allocated = smartlist_create();
- for (i = 0; i < 100000; ++i) {
+ for (i = 0; i < 20000; ++i) {
if (smartlist_len(allocated) < 20 || crypto_rand_int(2)) {
void *m = mp_pool_get(pool);
memset(m, 0x09, 241);
@@ -4356,9 +4377,10 @@
}
{
- log_severity_list_t *s = tor_malloc_zero(sizeof(log_severity_list_t));
- set_log_severity_config(loglevel, LOG_ERR, s);
- add_stream_log(s, "", stdout);
+ log_severity_list_t s;
+ memset(&s, 0, sizeof(s));
+ set_log_severity_config(loglevel, LOG_ERR, &s);
+ add_stream_log(&s, "", stdout);
}
options->command = CMD_RUN_UNITTESTS;
@@ -4402,11 +4424,6 @@
}
puts("");
- {
- void *x = tor_malloc(1024);
- (void)x;
- }
-
#ifdef USE_DMALLOC
tor_free_all(0);
dmalloc_log_unfreed();