Mod Cplusplus CVS committal
Author : johnksterling
Project : mod_cplusplus
Module : src
Dir : mod_cplusplus/src
Modified Files:
apache_handler.cpp mod_cplusplus.c
Log Message:
rework the cleanups so the modules are properly deleted before the kid process shuts down. Requested by William F. Dowling <wil...@th...>
===================================================================
RCS file: /cvsroot/modcplusplus/mod_cplusplus/src/apache_handler.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- apache_handler.cpp 14 Aug 2003 12:14:28 -0000 1.13
+++ apache_handler.cpp 24 May 2004 01:33:54 -0000 1.14
@@ -93,6 +93,31 @@
{
CALL_REQ_FUNCTION(logger);
}
+
+ static apr_status_t delete_handler(void *data)
+ {
+ ApacheHandler *handler = (ApacheHandler *)data;
+ delete handler;
+ return APR_SUCCESS;
+ }
+ static apr_status_t delete_input_filter(void *data)
+ {
+ ApacheInputFilter *filter = (ApacheInputFilter *)data;
+ delete filter;
+ return APR_SUCCESS;
+ }
+ static apr_status_t delete_output_filter(void *data)
+ {
+ ApacheOutputFilter *filter = (ApacheOutputFilter *)data;
+ delete filter;
+ return APR_SUCCESS;
+ }
+ static apr_status_t delete_protocol_handler(void *data)
+ {
+ ApacheProtocol *protocol = (ApacheProtocol *)data;
+ delete protocol;
+ return APR_SUCCESS;
+ }
char *load_cpp_module( apr_pool_t *pool, cpp_server_rec *server_rec,
const char *name, const char *path)
@@ -137,18 +162,30 @@
ApacheProtocol *protocol = cur_handler->protocol_func ?
cur_handler->protocol_func() : NULL;
- if( handler != NULL )
+ if( handler != NULL ) {
apr_hash_set(server_rec->handler_hash,
name, strlen(name), handler);
- if( input_filter != NULL )
+ apr_pool_cleanup_register(pool, (void *)handler, delete_handler,
+ apr_pool_cleanup_null);
+ }
+ if( input_filter != NULL ) {
apr_hash_set(server_rec->input_filter_hash,
name, strlen(name), input_filter);
- if( output_filter != NULL )
+ apr_pool_cleanup_register(pool, (void *)input_filter, delete_input_filter,
+ apr_pool_cleanup_null);
+ }
+ if( output_filter != NULL ) {
apr_hash_set(server_rec->output_filter_hash,
name, strlen(name), output_filter);
- if( protocol != NULL )
+ apr_pool_cleanup_register(pool, (void *)output_filter, delete_output_filter,
+ apr_pool_cleanup_null);
+ }
+ if( protocol != NULL ) {
apr_hash_set(server_rec->protocol_hash,
name, strlen(name), protocol);
+ apr_pool_cleanup_register(pool, (void *)protocol, delete_protocol_handler,
+ apr_pool_cleanup_null);
+ }
return NULL;
}
}
===================================================================
RCS file: /cvsroot/modcplusplus/mod_cplusplus/src/mod_cplusplus.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -3 -r1.19 -r1.20
--- mod_cplusplus.c 8 Jul 2002 16:59:55 -0000 1.19
+++ mod_cplusplus.c 24 May 2004 01:33:54 -0000 1.20
@@ -71,7 +71,7 @@
ap_get_module_config(cmd->server->module_config,
&cplusplus_module);
- return load_cpp_module(cmd->pool, server_rec, name, path_to_so);
+ return load_cpp_module(cmd->server->process->pool, server_rec, name, path_to_so);
}
static const char *pass_var(cmd_parms *cmd, void *config,
|