aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/curl/curl.h3
-rw-r--r--lib/easy.c5
-rw-r--r--lib/ssluse.c24
3 files changed, 22 insertions, 10 deletions
diff --git a/include/curl/curl.h b/include/curl/curl.h
index f4cf0318c..a6b9d7c37 100644
--- a/include/curl/curl.h
+++ b/include/curl/curl.h
@@ -573,6 +573,9 @@ typedef enum {
CURLCLOSEPOLICY_LAST /* last, never use this */
} curl_closepolicy;
+#define CURL_GLOBAL_NOT_SSL (1<<0)
+#define CURL_GLOBAL_NOTHING CURL_GLOBAL_NOT_SSL
+#define CURL_GLOBAL_DEFAULT 0
#ifdef __cplusplus
}
diff --git a/lib/easy.c b/lib/easy.c
index c98727e78..a4de38e17 100644
--- a/lib/easy.c
+++ b/lib/easy.c
@@ -80,8 +80,9 @@
CURLcode curl_global_init(long flags)
{
- flags = 0; /* not currently used */
- Curl_SSL_init();
+ if(!(flags & CURL_GLOBAL_NOT_SSL))
+ Curl_SSL_init();
+
return CURLE_OK;
}
diff --git a/lib/ssluse.c b/lib/ssluse.c
index 3707a4965..0d50c07f4 100644
--- a/lib/ssluse.c
+++ b/lib/ssluse.c
@@ -235,17 +235,21 @@ int cert_verify_callback(int ok, X509_STORE_CTX *ctx)
#endif
+#ifdef USE_SSLEAY
+/* "global" init done? */
+static int init_ssl=0;
+#endif
+
/* Global init */
void Curl_SSL_init(void)
{
#ifdef USE_SSLEAY
- static int only_once=0;
/* make sure this is only done once */
- if(0 != only_once)
+ if(0 != init_ssl)
return;
- only_once++; /* never again */
+ init_ssl++; /* never again */
/* Lets get nice error messages */
SSL_load_error_strings();
@@ -259,12 +263,16 @@ void Curl_SSL_init(void)
void Curl_SSL_cleanup(void)
{
#ifdef USE_SSLEAY
- /* Free the SSL error strings */
- ERR_free_strings();
+ if(init_ssl) {
+ /* only cleanup if we did a previous init */
+
+ /* Free the SSL error strings */
+ ERR_free_strings();
- /* EVP_cleanup() removes all ciphers and digests from the
- table. */
- EVP_cleanup();
+ /* EVP_cleanup() removes all ciphers and digests from the
+ table. */
+ EVP_cleanup();
+ }
#endif
}