Valgrind finds out that conninfo->servername is not free()d by
tls_conninfo_free().
== HEAP SUMMARY:
== in use at exit: 83,069 bytes in 2,690 blocks
== total heap usage: 4,107 allocs, 1,417 frees,
== 339,660 bytes allocated
==
== 17 bytes in 1 blocks are definitely lost in loss record 1 of 266
== at 0x4C28C20: malloc (vg_replace_malloc.c:296)
== by 0x58F5989: strdup (strdup.c:42)
== by 0x40B2C4: tls_conninfo_populate
== by 0x408C4F: tls_handshake
== by 0x403691: TlsContext::handshake()
== by 0x403343: TlsStream::connect(TlsConfig*, char const*,
== by 0x407781: main (in /home/schen/recipes/ssl/client)
==
== LEAK SUMMARY:
== definitely lost: 17 bytes in 1 blocks
== indirectly lost: 0 bytes in 0 blocks
== possibly lost: 0 bytes in 0 blocks
== still reachable: 83,052 bytes in 2,689 blocks
== suppressed: 0 bytes in 0 blocks
Here's a quick fix.
Regards,
Shuo Chen
====================================================
diff --git a/tls/tls_conninfo.c b/tls/tls_conninfo.c
--- a/tls/tls_conninfo.c
+++ b/tls/tls_conninfo.c
@@ -248,6 +248,8 @@ tls_conninfo_free(struct tls_conninfo *conninfo)
conninfo->alpn = NULL;
free(conninfo->cipher);
conninfo->cipher = NULL;
+ free(conninfo->servername);
+ conninfo->servername = NULL;
free(conninfo->version);
conninfo->version = NULL;