From 6241dfe961555b0ff1c3bcb922f19fb3b8540481 Mon Sep 17 00:00:00 2001 From: brectanus Date: Fri, 30 May 2008 20:01:44 +0000 Subject: [PATCH] Fixed XML multithreading crash. See #501. --- CHANGES | 3 +++ apache2/modsecurity.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/CHANGES b/CHANGES index 84c30e58..f303b941 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ 30 May 2008 - trunk ------------------- +* Fixed issue with multithreaded servers where concurrent XML processing + could crash the web server (at least under Windows). + * Fixed blocking in phase 3. * Persistent counter updates are now atomic. diff --git a/apache2/modsecurity.c b/apache2/modsecurity.c index 4ec77d8e..81abecab 100644 --- a/apache2/modsecurity.c +++ b/apache2/modsecurity.c @@ -15,6 +15,7 @@ #include "modsecurity.h" #include "msc_parsers.h" #include "msc_util.h" +#include "msc_xml.h" modsec_build_type_rec DSOLOCAL modsec_build_type[] = { { "-dev", 1 }, /* Development build */ @@ -121,6 +122,9 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) { * Performs per-child (new process) initialisation. */ void modsecurity_child_init(msc_engine *msce) { + /* Need to call this once per process before any other XML calls. */ + xmlInitParser(); + if (msce->auditlog_lock != NULL) { apr_status_t rc = apr_global_mutex_child_init(&msce->auditlog_lock, NULL, msce->mp); if (rc != APR_SUCCESS) {