Browse Source

bfgtls: Implement destructor to free memory when threads exit

Conflicts:
	util.c
Luke Dashjr 12 years ago
parent
commit
a2a20a441d
1 changed files with 13 additions and 1 deletions
  1. 13 1
      util.c

+ 13 - 1
util.c

@@ -2530,9 +2530,21 @@ struct bfgtls_data *get_bfgtls()
 	return bfgtls;
 }
 
+static
+void bfgtls_free(void * const p)
+{
+	struct bfgtls_data * const bfgtls = p;
+	free(bfgtls->bfg_strerror_result);
+#ifdef WIN32
+	if (bfgtls->bfg_strerror_socketresult)
+		LocalFree(bfgtls->bfg_strerror_socketresult);
+#endif
+	free(bfgtls);
+}
+
 void bfg_init_threadlocal()
 {
-	if (pthread_key_create(&key_bfgtls, NULL))
+	if (pthread_key_create(&key_bfgtls, bfgtls_free))
 		quithere(1, "pthread_key_create failed");
 }