summary refs log tree commit diff stats
path: root/lib
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 /lib
parentba61a8d00a65948fc0b3a1c100a20cca711fdd0f (diff)
downloadNim-3ecf33fa6acc87b204ac0240b597d5d91d0a78f7.tar.gz
net.nim: destroyContext for destroying SSLContext
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/net.nim8
1 files changed, 7 insertions, 1 deletions
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.
     ##