diff --git a/src/interfaces/libpq/fe-secure.c b/src/interfaces/libpq/fe-secure.c
new file mode 100644
index 3bd0113..e025b49 100644
*** a/src/interfaces/libpq/fe-secure.c
--- b/src/interfaces/libpq/fe-secure.c
*************** static SSL_CTX *SSL_context = NULL;
*** 102,107 ****
--- 102,108 ----
  
  #ifdef ENABLE_THREAD_SAFETY
  static long ssl_open_connections = 0;
+ static int initialized_hooks = 0;
  
  #ifndef WIN32
  static pthread_mutex_t ssl_config_mutex = PTHREAD_MUTEX_INITIALIZER;
*************** init_ssl_system(PGconn *conn)
*** 947,952 ****
--- 948,955 ----
  
  		if (ssl_open_connections++ == 0)
  		{
+ 			initialized_hooks = 1;
+ 
  			/* These are only required for threaded libcrypto applications */
  			CRYPTO_set_id_callback(pq_threadidcallback);
  			CRYPTO_set_locking_callback(pq_lockingcallback);
*************** destroy_ssl_system(void)
*** 1015,1021 ****
  	if (pq_init_crypto_lib && ssl_open_connections > 0)
  		--ssl_open_connections;
  
! 	if (pq_init_crypto_lib && ssl_open_connections == 0)
  	{
  		/* No connections left, unregister libcrypto callbacks */
  		CRYPTO_set_locking_callback(NULL);
--- 1018,1024 ----
  	if (pq_init_crypto_lib && ssl_open_connections > 0)
  		--ssl_open_connections;
  
! 	if (pq_init_crypto_lib && ssl_open_connections == 0 && initialized_hooks == 0)
  	{
  		/* No connections left, unregister libcrypto callbacks */
  		CRYPTO_set_locking_callback(NULL);
