Browse Source

bfgtls: Implement destructor to free memory when threads exit

Luke Dashjr 12 years ago
parent
commit
04bbe231e1
1 changed files with 13 additions and 1 deletions
  1. 13 1
      util.c

+ 13 - 1
util.c

@@ -2653,6 +2653,18 @@ struct bfgtls_data *get_bfgtls()
 	return 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);
+}
+
 #ifdef NEED_BFG_LOWL_VCOM
 #ifdef NEED_BFG_LOWL_VCOM
 struct detectone_meta_info_t *_detectone_meta_info()
 struct detectone_meta_info_t *_detectone_meta_info()
 {
 {
@@ -2662,7 +2674,7 @@ struct detectone_meta_info_t *_detectone_meta_info()
 
 
 void bfg_init_threadlocal()
 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");
 		quithere(1, "pthread_key_create failed");
 }
 }