mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
libpq: Don't overwrite existing OpenSSL thread callbacks
If someone else already set the callbacks, don't overwrite them with ours. When unsetting the callbacks, only unset them if they point to ours. Author: Jan Urbański <wulczer@wulczer.org>
This commit is contained in:
@ -806,8 +806,11 @@ pgtls_init(PGconn *conn)
|
||||
|
||||
if (ssl_open_connections++ == 0)
|
||||
{
|
||||
/* These are only required for threaded libcrypto applications */
|
||||
/* These are only required for threaded libcrypto applications, but
|
||||
* make sure we don't stomp on them if they're already set. */
|
||||
if (CRYPTO_get_id_callback() == NULL)
|
||||
CRYPTO_set_id_callback(pq_threadidcallback);
|
||||
if (CRYPTO_get_locking_callback() == NULL)
|
||||
CRYPTO_set_locking_callback(pq_lockingcallback);
|
||||
}
|
||||
}
|
||||
@ -885,8 +888,11 @@ destroy_ssl_system(void)
|
||||
|
||||
if (pq_init_crypto_lib && ssl_open_connections == 0)
|
||||
{
|
||||
/* No connections left, unregister libcrypto callbacks */
|
||||
/* No connections left, unregister libcrypto callbacks, if no one
|
||||
* registered different ones in the meantime. */
|
||||
if (CRYPTO_get_locking_callback() == pq_lockingcallback)
|
||||
CRYPTO_set_locking_callback(NULL);
|
||||
if (CRYPTO_get_id_callback() == pq_threadidcallback)
|
||||
CRYPTO_set_id_callback(NULL);
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user