diff options
-rw-r--r-- | examples/ssl/pskclient.nim | 1 | ||||
-rw-r--r-- | lib/pure/net.nim | 8 |
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. ## |