Commit b6a7bd35 authored by William A. Rowe Jr's avatar William A. Rowe Jr
Browse files

  The mutex must be pool-managed, not ssl managed.  We are encountering
  segfaults on Win32 when the cleanup of the mutex occurs after the pool
  was destroyed.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk/modules/ssl@92818 13f79535-47bb-0310-9956-ffa450edef68
parent ef78c581
Loading
Loading
Loading
Loading
+0 −1
Changes for mod_ssl.h: 0 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -733,7 +733,6 @@ int ssl_mutex_init(server_rec *, apr_pool_t *);
int          ssl_mutex_reinit(server_rec *, apr_pool_t *);
int          ssl_mutex_on(server_rec *);
int          ssl_mutex_off(server_rec *);
int          ssl_mutex_kill(server_rec *);

/*  Logfile Support  */
void         ssl_log_open(server_rec *, server_rec *, apr_pool_t *);
+0 −2
Changes for ssl_engine_init.c: 0 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -992,8 +992,6 @@ apr_status_t ssl_init_ModuleKill(void *data)
     */
    ssl_scache_kill(s);

    ssl_mutex_kill(s);

    /* 
     * Destroy the temporary keys and params
     */
+2 −15
Changes for ssl_engine_mutex.c: 2 added lines, 15 removed lines.
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ int ssl_mutex_init(server_rec *s, apr_pool_t *p)

    if (mc->nMutexMode == SSL_MUTEXMODE_NONE) 
        return TRUE;

    if (apr_lock_create(&mc->pMutex, APR_MUTEX, APR_LOCKALL, APR_LOCK_DEFAULT,
                        mc->szMutexFile, p) != APR_SUCCESS)
        return FALSE;
@@ -80,6 +81,7 @@ int ssl_mutex_reinit(server_rec *s, apr_pool_t *p)

    if (mc->nMutexMode == SSL_MUTEXMODE_NONE)
        return TRUE;

    if (apr_lock_child_init(&mc->pMutex, mc->szMutexFile, p) != APR_SUCCESS)
        return FALSE;
    return TRUE;
@@ -111,18 +113,3 @@ int ssl_mutex_off(server_rec *s)
    return TRUE;
}
int ssl_mutex_kill(server_rec *s)
{
    SSLModConfigRec *mc = myModConfig(s);

    if (mc->nMutexMode == SSL_MUTEXMODE_NONE)
        return TRUE;
    /* XXX: currently mutex is not created until 2nd pass at startup */
    if (!mc->pMutex)
        return TRUE;
    if (apr_lock_destroy(mc->pMutex) != APR_SUCCESS)
        return FALSE;
    mc->pMutex = NULL;
    return TRUE;
}