You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ak...@locus.apache.org on 2000/03/23 15:48:45 UTC
cvs commit: apache-2.0/src/main http_config.c http_main.c
ake 00/03/23 06:48:45
Modified: src CHANGES
src/ap ap_hooks.c
src/include http_config.h
src/main http_config.c http_main.c
Log:
Clear hook registrations between reads of the config file.
When DSOs are unloaded and re-loaded the old hook pointers may
no longer be valid. This fix eliminates potential segfaults.
Revision Changes Path
1.42 +4 -0 apache-2.0/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apache-2.0/src/CHANGES,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -r1.41 -r1.42
--- CHANGES 2000/03/23 14:41:29 1.41
+++ CHANGES 2000/03/23 14:48:44 1.42
@@ -1,4 +1,8 @@
Changes with Apache 2.0a2-dev
+ *) Clear hook registrations between reads of the config file.
+ When DSOs are unloaded and re-loaded the old hook pointers may
+ no longer be valid. This fix eliminates potential segfaults.
+ [Allan Edwards <ak...@raleigh.ibm.com>]
*) Fix a problem with Sigfunc not being defined or bypassed
if sigaction() wasn't found. [Jim Jagielski]
1.11 +12 -1 apache-2.0/src/ap/ap_hooks.c
Index: ap_hooks.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/ap/ap_hooks.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- ap_hooks.c 2000/01/28 18:00:33 1.10
+++ ap_hooks.c 2000/03/23 14:48:44 1.11
@@ -42,7 +42,7 @@
qsort(pItems,nItems,sizeof *pItems,crude_order);
for(n=0 ; n < nItems ; ++n) {
pData[n].nPredecessors=0;
- pData[n].ppPredecessors=ap_palloc(p,nItems*sizeof *pData[n].ppPredecessors);
+ pData[n].ppPredecessors=ap_pcalloc(p,nItems*sizeof *pData[n].ppPredecessors);
pData[n].pNext=NULL;
pData[n].pData=&pItems[n];
}
@@ -165,6 +165,17 @@
HookSortEntry *pEntry=&((HookSortEntry *)s_aHooksToSort->elts)[n];
*pEntry->paHooks=sort_hook(*pEntry->paHooks,pEntry->szHookName);
}
+}
+
+void ap_hook_deregister_all(void)
+{
+ int n;
+
+ for(n=0 ; n < s_aHooksToSort->nelts ; ++n) {
+ HookSortEntry *pEntry=&((HookSortEntry *)s_aHooksToSort->elts)[n];
+ *pEntry->paHooks=NULL;
+ }
+ s_aHooksToSort=NULL;
}
void ap_show_hook(const char *szName,const char * const *aszPre,
1.8 +2 -0 apache-2.0/src/include/http_config.h
Index: http_config.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/include/http_config.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- http_config.h 2000/03/10 00:05:50 1.7
+++ http_config.h 2000/03/23 14:48:45 1.8
@@ -329,6 +329,8 @@
server_rec *ap_read_config(process_rec *process, ap_context_t *temp_pool, const char *config_name);
void ap_post_config_hook(ap_context_t *pconf, ap_context_t *plog, ap_context_t *ptemp, server_rec *s);
void ap_child_init_hook(ap_context_t *pchild, server_rec *s);
+void ap_register_hooks(module *m);
+void ap_hook_deregister_all(void);
/* For http_request.c... */
1.29 +2 -2 apache-2.0/src/main/http_config.c
Index: http_config.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/main/http_config.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- http_config.c 2000/03/15 23:18:31 1.28
+++ http_config.c 2000/03/23 14:48:45 1.29
@@ -360,7 +360,7 @@
int g_bDebugHooks;
const char *g_szCurrentHookName;
-static void register_hooks(module *m)
+void ap_register_hooks(module *m)
{
if(m->register_hooks)
{
@@ -430,7 +430,7 @@
#endif /*_OSD_POSIX*/
/* FIXME: is this the right place to call this? */
- register_hooks(m);
+ ap_register_hooks(m);
}
/*
1.36 +6 -1 apache-2.0/src/main/http_main.c
Index: http_main.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/main/http_main.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- http_main.c 2000/03/22 10:26:44 1.35
+++ http_main.c 2000/03/23 14:48:45 1.36
@@ -296,6 +296,7 @@
ap_context_t *plog; /* Pool of log streams, reset _after_ each read of conf */
ap_context_t *ptemp; /* Pool for temporary config stuff, reset often */
ap_context_t *pcommands; /* Pool for -C and -c switches */
+ module **mod;
ap_initialize();
process = create_process(argc, (const char **)argv);
@@ -305,7 +306,7 @@
ap_util_uri_init();
- g_pHookPool=pglobal;
+ g_pHookPool=pconf;
ap_setup_prelinked_modules(process);
@@ -375,7 +376,11 @@
ap_destroy_pool(ptemp);
for (;;) {
+ ap_hook_deregister_all();
ap_clear_pool(pconf);
+ for (mod = ap_prelinked_modules; *mod != NULL; mod++) {
+ ap_register_hooks(*mod);
+ }
ap_create_context(&ptemp, pconf);
ap_server_root = def_server_root;
ap_run_pre_config(pconf, plog, ptemp);
Re: cvs commit: apache-2.0/src/main http_config.c http_main.c
Posted by Bill Stoddard <st...@raleigh.ibm.com>.
Yep
Bill
----- Original Message -----
From: David Reid <dr...@jetnet.co.uk>
To: <ne...@apache.org>
Sent: Thursday, March 23, 2000 9:51 AM
Subject: Re: cvs commit: apache-2.0/src/main http_config.c http_main.c
> > ake 00/03/23 06:48:45
> >
> > Modified: src CHANGES
> > src/ap ap_hooks.c
> > src/include http_config.h
> > src/main http_config.c http_main.c
> > Log:
> > Clear hook registrations between reads of the config file.
> > When DSOs are unloaded and re-loaded the old hook pointers may
> > no longer be valid. This fix eliminates potential segfaults.
>
> This entry in the STATUS file can now be removed, no?
>
> "
> * DSO hooks registered during the preflight call to ap_read_config
> are not 'unregistered' during the preflight clean-up. Thus, when
> Apache comes up, the hook tables contain two entries for each DSO hook,
> one of which is bogus, leftover from the preflight.
> "
>
Re: cvs commit: apache-2.0/src/main http_config.c http_main.c
Posted by David Reid <dr...@jetnet.co.uk>.
> ake 00/03/23 06:48:45
>
> Modified: src CHANGES
> src/ap ap_hooks.c
> src/include http_config.h
> src/main http_config.c http_main.c
> Log:
> Clear hook registrations between reads of the config file.
> When DSOs are unloaded and re-loaded the old hook pointers may
> no longer be valid. This fix eliminates potential segfaults.
This entry in the STATUS file can now be removed, no?
"
* DSO hooks registered during the preflight call to ap_read_config
are not 'unregistered' during the preflight clean-up. Thus, when
Apache comes up, the hook tables contain two entries for each DSO hook,
one of which is bogus, leftover from the preflight.
"