pcs 98/02/06 10:19:57
Modified: src/main http_config.c
Log:
Add an API function remove_module() to remove a module structure from the
linked list of module structures. This is called by the dynamic module
modules (mod_dll, mod_so) when a module is unloaded. This should only ever
be called during a restart since it invalidates per-dir and per-server
vectors.
Revision Changes Path
1.96 +42 -0 apache-1.3/src/main/http_config.c
Index: http_config.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/http_config.c,v
retrieving revision 1.95
retrieving revision 1.96
diff -u -r1.95 -r1.96
--- http_config.c 1998/02/02 22:33:31 1.95
+++ http_config.c 1998/02/06 18:19:56 1.96
@@ -530,6 +530,48 @@
build_method_shortcuts();
}
+/*
+ * remove_module undoes what add_module did. There are some caveats:
+ * when the module is removed, its slot is lost so all the current
+ * per-dir and per-server configurations are invalid. So we should
+ * only ever call this function when you are invalidating almost
+ * all our current data. I.e. when doing a restart.
+ */
+
+API_EXPORT(void) remove_module(module *m)
+{
+ module *modp;
+
+ modp = top_module;
+ if (modp == m) {
+ /* We are the top module, special case */
+ top_module = modp->next;
+ }
+ else {
+ /* Not the top module, find use. When found modp will
+ * point to the module _before_ us in the list
+ */
+
+ while (modp && modp->next != m) {
+ modp = modp->next;
+ }
+ if (!modp) {
+ /* Uh-oh, this module doesn't exist */
+ aplog_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, NULL,
+ "Cannot remove module %s: not found in module list",
+ m->name);
+ return;
+ }
+ /* Eliminate us from the module list */
+ modp->next = modp->next->next;
+ }
+
+ m->module_index = -1; /* simulate being unloaded, should
+ * be unnecessary */
+ dynamic_modules--;
+}
+
+
void setup_prelinked_modules()
{
module **m;