summaryrefslogtreecommitdiff
path: root/vio/viossl.c
diff options
context:
space:
mode:
Diffstat (limited to 'vio/viossl.c')
-rw-r--r--vio/viossl.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/vio/viossl.c b/vio/viossl.c
index 4267486112f..5e4203a3fb5 100644
--- a/vio/viossl.c
+++ b/vio/viossl.c
@@ -140,13 +140,29 @@ int vio_ssl_close(Vio *vio)
SSL_get_error(ssl, r)));
break;
}
- SSL_free(ssl);
- vio->ssl_arg= 0;
}
DBUG_RETURN(vio_close(vio));
}
+void vio_ssl_delete(Vio *vio)
+{
+ if (!vio)
+ return; /* It must be safe to delete null pointer */
+
+ if (vio->type == VIO_TYPE_SSL)
+ vio_ssl_close(vio); /* Still open, close connection first */
+
+ if (vio->ssl_arg)
+ {
+ SSL_free((SSL*) vio->ssl_arg);
+ vio->ssl_arg= 0;
+ }
+
+ vio_delete(vio);
+}
+
+
int sslaccept(struct st_VioSSLFd *ptr, Vio *vio, long timeout)
{
SSL *ssl;