summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorMichał Zieliński <michal@zielinscy.org.pl>2015-10-24 22:48:33 +0200
committerMichał Zieliński <michal@zielinscy.org.pl>2015-10-24 22:48:33 +0200
commit3ecf33fa6acc87b204ac0240b597d5d91d0a78f7 (patch)
treed06a2939d85b3c185d7fd795286a624dcd8aacc6
parentba61a8d00a65948fc0b3a1c100a20cca711fdd0f (diff)
downloadNim-3ecf33fa6acc87b204ac0240b597d5d91d0a78f7.tar.gz
net.nim: destroyContext for destroying SSLContext
-rw-r--r--examples/ssl/pskclient.nim1
-rw-r--r--lib/pure/net.nim8
2 files changed, 8 insertions, 1 deletions
diff --git a/examples/ssl/pskclient.nim b/examples/ssl/pskclient.nim
index 7c93bbb61..c83f27fbc 100644
--- a/examples/ssl/pskclient.nim
+++ b/examples/ssl/pskclient.nim
@@ -13,3 +13,4 @@ proc clientFunc(identityHint: string): tuple[identity: string, psk: string] =
 let context = newContext(cipherList="PSK-AES256-CBC-SHA")
 context.clientGetPskFunc = clientFunc
 context.wrapConnectedSocket(sock, handshakeAsClient)
+context.destroyContext()
diff --git a/lib/pure/net.nim b/lib/pure/net.nim
index 4bdfede42..368ff6e87 100644
--- a/lib/pure/net.nim
+++ b/lib/pure/net.nim
@@ -267,7 +267,6 @@ when defined(ssl):
     newCTX.loadCertificates(certFile, keyFile)
 
     result = SSLContext(newCTX)
-    # this is never freed, but SSLContext can't be freed anyway yet
     let extraInternal = new(SslContextExtraInternal)
     GC_ref(extraInternal)
     result.setExtraData(extraInternalIndex, cast[pointer](extraInternal))
@@ -275,6 +274,13 @@ when defined(ssl):
   proc getExtraInternal(ctx: SSLContext): SslContextExtraInternal =
     return cast[SslContextExtraInternal](ctx.getExtraData(extraInternalIndex))
 
+  proc destroyContext*(ctx: SSLContext) =
+    ## Free memory referenced by SSLContext.
+    let extraInternal = ctx.getExtraInternal()
+    if extraInternal != nil:
+      GC_unref(extraInternal)
+    SSLCTX(ctx).SSL_CTX_free()
+
   proc `pskIdentityHint=`*(ctx: SSLContext, hint: string) =
     ## Sets the identity hint passed to server.
     ##