diff options
Diffstat (limited to 'vio/viossl.c')
-rw-r--r-- | vio/viossl.c | 20 |
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; |