=pod

=head1 NAME

CONF_modules_free, CONF_modules_finish, CONF_modules_unload -
OpenSSL configuration cleanup functions

=head1 SYNOPSIS

 #include <openssl/conf.h>

 void CONF_modules_finish(void);
 void CONF_modules_unload(int all);

Deprecated since OpenSSL 1.1.0, can be hidden entirely by defining
B<OPENSSL_API_COMPAT> with a suitable version value, see
L<openssl_user_macros(7)>:

 void CONF_modules_free(void)

=head1 DESCRIPTION

CONF_modules_free() closes down and frees up all memory allocated by all
configuration modules.  Normally, in versions of OpenSSL prior to 1.1.0,
applications called
CONF_modules_free() at exit to tidy up any configuration performed.

CONF_modules_finish() calls each configuration modules B<finish> handler
to free up any configuration that module may have performed.

CONF_modules_unload() finishes and unloads configuration modules. If
B<all> is set to B<0> only modules loaded from DSOs will be unloads. If
B<all> is B<1> all modules, including built-in modules will be unloaded.

=head1 RETURN VALUES

None of the functions return a value.

=head1 SEE ALSO

L<config(5)>, L<OPENSSL_config(3)>,
L<CONF_modules_load_file(3)>

=head1 HISTORY

CONF_modules_free() was deprecated in OpenSSL 1.1.0; do not use it.
For more information see L<OPENSSL_init_crypto(3)>.

=head1 COPYRIGHT

Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
