From: Michał Kępień Date: Thu, 26 Sep 2019 08:20:26 +0000 (+0200) Subject: Properly initialize libxml2 X-Git-Tag: v9.15.5~19^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3c0b00ef6b37e51e9c0075a8afffb8e1ff3398c;p=thirdparty%2Fbind9.git Properly initialize libxml2 When libxml2 is to be used in a multi-threaded application, the xmlInitThreads() function must be called before any other libxml2 function. This function does different things on various platforms and thus one can get away without calling it on Unix systems, but not on Windows, where it initializes critical section objects used for synchronizing access to data structures shared between threads. Add the missing xmlInitThreads() call to prevent crashes on affected systems. Also add a matching xmlCleanupThreads() call to properly release the resources set up by xmlInitThreads(). --- diff --git a/bin/named/statschannel.c b/bin/named/statschannel.c index 4d277d9ed8d..d7f864acec2 100644 --- a/bin/named/statschannel.c +++ b/bin/named/statschannel.c @@ -3587,6 +3587,10 @@ named_statschannels_configure(named_server_t *server, const cfg_obj_t *config, ISC_LIST_INIT(new_listeners); +#ifdef HAVE_LIBXML2 + xmlInitThreads(); +#endif /* HAVE_LIBXML2 */ + /* * Get the list of named.conf 'statistics-channels' statements. */ @@ -3719,6 +3723,10 @@ named_statschannels_shutdown(named_server_t *server) { ISC_LIST_UNLINK(server->statschannels, listener, link); shutdown_listener(listener); } + +#ifdef HAVE_LIBXML2 + xmlCleanupThreads(); +#endif /* HAVE_LIBXML2 */ } isc_result_t