Restore the ERR_remove_thread_state() API and make it a no-op

The ERR_remove_thread_state() API is restored to take a pointer
argument, but does nothing more.  ERR_remove_state() is also made into
a no-op.  Both functions are deprecated and users are recommended to
use OPENSSL_thread_stop() instead.

Documentation is changed to reflect this.

Reviewed-by: Matt Caswell <matt@openssl.org>
This commit is contained in:
Richard Levitte 2016-05-08 17:01:09 +02:00
parent 06aa885d0c
commit 21e001747d
6 changed files with 32 additions and 30 deletions

View File

@ -740,7 +740,7 @@ const char *ERR_reason_error_string(unsigned long e)
return ((p == NULL) ? NULL : p->string);
}
void ERR_remove_thread_state(void)
void err_delete_thread_state(void)
{
ERR_STATE *state = ERR_get_state();
if (state == NULL)
@ -750,10 +750,15 @@ void ERR_remove_thread_state(void)
ERR_STATE_free(state);
}
#if OPENSSL_API_COMPAT < 0x10000000L
void ERR_remove_thread_state(void *dummy)
{
}
#endif
#if OPENSSL_API_COMPAT < 0x10000000L
void ERR_remove_state(unsigned long pid)
{
ERR_remove_thread_state();
}
#endif

View File

@ -13,5 +13,6 @@
void err_load_crypto_strings_int(void);
void err_cleanup(void);
void err_delete_thread_state(void);
#endif

View File

@ -351,9 +351,9 @@ static void ossl_init_thread_stop(struct thread_local_inits_st *locals)
if (locals->err_state) {
#ifdef OPENSSL_INIT_DEBUG
fprintf(stderr, "OPENSSL_INIT: ossl_init_thread_stop: "
"ERR_remove_thread_state()\n");
"err_delete_thread_state()\n");
#endif
ERR_remove_thread_state();
err_delete_thread_state();
}
OPENSSL_free(locals);

View File

@ -2,44 +2,42 @@
=head1 NAME
ERR_remove_thread_state, ERR_remove_state - free a thread's error queue
ERR_remove_thread_state, ERR_remove_state - DEPRECATED
=head1 SYNOPSIS
#include <openssl/err.h>
void ERR_remove_thread_state(void);
Deprecated:
#if OPENSSL_API_COMPAT < 0x10000000L
void ERR_remove_state(unsigned long pid);
#endif
#if OPENSSL_API_COMPAT < 0x10100000L
void ERR_remove_thread_state(void *);
#endif
=head1 DESCRIPTION
ERR_remove_thread_state() frees the error queue associated with the current
thread.
The functions described here were used to free the error queue
associated with the current or specificed thread.
Since error queue data structures are allocated automatically for new
threads, they must be freed when threads are terminated in order to
avoid memory leaks.
ERR_remove_state is deprecated and has been replaced by
ERR_remove_thread_state. Any argument to this function is ignored and
calling ERR_remove_state is equivalent to B<ERR_remove_thread_state()>.
They are now deprecated and do nothing, please use
OPENSSL_thread_stop() instead.
=head1 RETURN VALUE
ERR_remove_thread_state and ERR_remove_state() return no value.
The functions described here return no value.
=head1 SEE ALSO
L<err(3)>
L<err(3)>, L<OPENSSL_thread_stop(3)>
=head1 HISTORY
ERR_remove_state()
was deprecated in OpenSSL 1.0.0 when ERR_remove_thread_state() was introduced.
ERR_remove_state() was deprecated in OpenSSL 1.0.0 when
ERR_remove_thread_state() was introduced.
ERR_remove_thread_state() was deprecated in OpenSSL 1.1.0 when the
thread handling functionality was entirely rewritten.
=cut

View File

@ -22,7 +22,6 @@ err - error codes
int ERR_GET_REASON(unsigned long e);
void ERR_clear_error(void);
void ERR_remove_thread_state(void);
char *ERR_error_string(unsigned long e, char *buf);
const char *ERR_lib_error_string(unsigned long e);
@ -48,6 +47,10 @@ Deprecated:
void ERR_remove_state(unsigned long pid);
#endif
#if OPENSSL_API_COMPAT < 0x10100000L
void ERR_remove_thread_state(void *);
#endif
#if OPENSSL_API_COMPAT < 0x10100000L
void ERR_free_strings(void)
#endif
@ -71,9 +74,6 @@ messages is described in L<ERR_error_string(3)>.
L<ERR_clear_error(3)> can be used to clear the
error queue.
Note that L<ERR_remove_thread_state(3)> should be used to
avoid memory leaks when threads are terminated.
=head1 ADDING NEW ERROR CODES TO OPENSSL
See L<ERR_put_error(3)> if you want to record error codes in the
@ -186,7 +186,6 @@ L<ERR_clear_error(3)>,
L<ERR_error_string(3)>,
L<ERR_print_errors(3)>,
L<ERR_load_crypto_strings(3)>,
L<ERR_remove_thread_state(3)>,
L<ERR_put_error(3)>,
L<ERR_load_strings(3)>,
L<SSL_get_error(3)>

View File

@ -359,9 +359,8 @@ void ERR_load_ERR_strings(void);
# define ERR_free_strings() while(0) continue
#endif
void ERR_remove_thread_state(void);
DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid)) /* if zero we
* look it up */
DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *))
DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid))
ERR_STATE *ERR_get_state(void);
LHASH_OF(ERR_STRING_DATA) *ERR_get_string_table(void);