I missed a couple of files (notably mod_rewrite.c) in the original patch.
Here is an updated version.

--Brian

Index: include/httpd.h
===================================================================
RCS file: /home/cvspublic/httpd-2.0/include/httpd.h,v
retrieving revision 1.165
diff -u -r1.165 httpd.h
--- include/httpd.h     2001/09/14 23:30:41     1.165
+++ include/httpd.h     2001/09/16 23:42:13
@@ -733,9 +733,6 @@
      * The difference between headers_out and err_headers_out is that the
      * latter are printed even on error, and persist across internal redirects
      * (so the headers printed for ErrorDocument handlers will have them).
-     *
-     * The 'notes' apr_table_t is for notes from one module to another, with no
-     * other set purpose in mind...
      */
 
     /** MIME header environment from the request */
@@ -747,8 +744,6 @@
     apr_table_t *err_headers_out;
     /** Array of environment variables to be used for sub processes */
     apr_table_t *subprocess_env;
-    /** Notes from one module to another */
-    apr_table_t *notes;
 
     /* content_type, handler, content_encoding, content_language, and all
      * content_languages MUST be lowercased strings.  They may be pointers
Index: modules/dav/main/mod_dav.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/dav/main/mod_dav.c,v
retrieving revision 1.60
diff -u -r1.60 mod_dav.c
--- modules/dav/main/mod_dav.c  2001/08/23 19:00:07     1.60
+++ modules/dav/main/mod_dav.c  2001/09/16 23:42:16
@@ -526,7 +526,7 @@
 
     if (response == NULL) {
        /* our error messages are safe; tell Apache this */
-       apr_table_setn(r->notes, "verbose-error-to", "*");
+       apr_pool_userdata_set("*", "verbose-error-to", NULL, r->pool);
        return err->status;
     }
 
Index: modules/generators/mod_cgi.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/generators/mod_cgi.c,v
retrieving revision 1.103
diff -u -r1.103 mod_cgi.c
--- modules/generators/mod_cgi.c        2001/08/27 20:25:42     1.103
+++ modules/generators/mod_cgi.c        2001/09/16 23:42:17
@@ -122,8 +122,10 @@
 
 static int is_scriptaliased(request_rec *r)
 {
-    const char *t = apr_table_get(r->notes, "alias-forced-type");
-    return t && (!strcasecmp(t, "cgi-script"));
+    const char *t;
+    return (apr_pool_userdata_get((void **)&t, "alias-forced-type",
+                                  r->pool) == APR_SUCCESS)
+        && t && (!strcasecmp(t, "cgi-script"));
 }
 
 /* Configuration stuff */
Index: modules/http/http_protocol.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/http/http_protocol.c,v
retrieving revision 1.361
diff -u -r1.361 http_protocol.c
--- modules/http/http_protocol.c        2001/09/02 03:21:47     1.361
+++ modules/http/http_protocol.c        2001/09/16 23:42:19
@@ -1626,7 +1626,8 @@
 {
     const char *notes, *result;
     
-    if ((notes = apr_table_get(r->notes, key)) == NULL) {
+    if ((apr_pool_userdata_get((void**)&notes, key, r->pool) != APR_SUCCESS)
+        || !notes) {
         result = apr_pstrcat(r->pool, prefix, suffix, NULL);
     }
     else {
@@ -1818,8 +1819,12 @@
             * that is totally safe for any user to see (ie lacks paths,
             * database passwords, etc.)
             */
-           if (((error_notes = apr_table_get(r->notes, "error-notes")) != NULL)
-               && (h1 = apr_table_get(r->notes, "verbose-error-to")) != NULL
+           if ((apr_pool_userdata_get((void **)&error_notes, "error_notes",
+                                       r->pool) == APR_SUCCESS)
+                && error_notes
+                && (apr_pool_userdata_get((void **)&h1, "verbose-error-to",
+                                          r->pool) == APR_SUCCESS)
+                && h1
                && (strcmp(h1, "*") == 0)) {
                return(apr_pstrcat(p, error_notes, "<p />\n", NULL));
            }
Index: modules/http/http_request.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/http/http_request.c,v
retrieving revision 1.113
diff -u -r1.113 http_request.c
--- modules/http/http_request.c 2001/08/31 03:49:42     1.113
+++ modules/http/http_request.c 2001/09/16 23:42:19
@@ -204,8 +204,12 @@
             * more informative (than the plain canned) messages to us.
             * Propagate them to ErrorDocuments via the ERROR_NOTES variable:
             */
-            if ((error_notes = apr_table_get(r->notes, "error-notes")) != NULL) {
-               apr_table_setn(r->subprocess_env, "ERROR_NOTES", error_notes);
+            if (APR_STATUS_IS_SUCCESS(apr_pool_userdata_get((void **)&error_notes,
+                                                            "error-notes",
+                                                            r->pool))
+                && error_notes) {
+                apr_pool_userdata_set(error_notes, "error-notes", NULL,
+                                      r->pool);
            }
             r->method = apr_pstrdup(r->pool, "GET");
             r->method_number = M_GET;
@@ -373,7 +377,6 @@
     new->headers_out     = apr_table_make(r->pool, 12);
     new->err_headers_out = r->err_headers_out;
     new->subprocess_env  = rename_original_env(r->pool, r->subprocess_env);
-    new->notes           = apr_table_make(r->pool, 5);
     new->allowed_methods = ap_make_method_list(new->pool, 2);
 
     new->htaccess        = r->htaccess;
@@ -424,7 +427,7 @@
     r->finfo = rr->finfo;
     r->per_dir_config = rr->per_dir_config;
     /* copy output headers from subrequest, but leave negotiation headers */
-    r->notes = apr_table_overlay(r->pool, rr->notes, r->notes);
+    apr_pool_userdata_overlay(r->pool, rr->pool);
     r->headers_out = apr_table_overlay(r->pool, rr->headers_out,
                                     r->headers_out);
     r->err_headers_out = apr_table_overlay(r->pool, rr->err_headers_out,
Index: modules/http/mod_mime.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/http/mod_mime.c,v
retrieving revision 1.63
diff -u -r1.63 mod_mime.c
--- modules/http/mod_mime.c     2001/09/08 05:50:12     1.63
+++ modules/http/mod_mime.c     2001/09/16 23:42:20
@@ -814,8 +814,8 @@
      * skip the notes to alert mod_negotiation we are clueless.
      */
     if (found_metadata) {
-        apr_table_setn(r->notes, "ap-mime-exceptions-list", 
-                       (void *)exception_list);
+        apr_pool_userdata_set((void *)exception_list,
+                              "ap-mime-exceptions-list", NULL, r->pool);
     }
 
     if (r->content_type) {
Index: modules/loggers/mod_log_config.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/loggers/mod_log_config.c,v
retrieving revision 1.68
diff -u -r1.68 mod_log_config.c
--- modules/loggers/mod_log_config.c    2001/08/27 20:50:01     1.68
+++ modules/loggers/mod_log_config.c    2001/09/16 23:42:21
@@ -196,6 +196,7 @@
 #include "http_core.h"          /* For REMOTE_NAME */
 #include "http_log.h"
 #include "http_protocol.h"
+#include "util_time.h"
 
 #if APR_HAVE_UNISTD_H
 #include <unistd.h>
@@ -417,7 +418,13 @@
 
 static const char *log_note(request_rec *r, char *a)
 {
-    return apr_table_get(r->notes, a);
+    void* data;
+    if (apr_pool_userdata_get(&data, a, r->pool) != APR_SUCCESS) {
+        return NULL;
+    }
+    else {
+        return (const char*)data;
+    }
 }
 static const char *log_env_var(request_rec *r, char *a)
 {
Index: modules/mappers/mod_alias.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/mappers/mod_alias.c,v
retrieving revision 1.31
diff -u -r1.31 mod_alias.c
--- modules/mappers/mod_alias.c 2001/08/23 18:49:55     1.31
+++ modules/mappers/mod_alias.c 2001/09/16 23:42:21
@@ -372,7 +372,8 @@
        if (found) {
            if (p->handler) {   /* Set handler, and leave a note for mod_cgi */
                r->handler = p->handler;
-               apr_table_setn(r->notes, "alias-forced-type", r->handler);
+                apr_pool_userdata_set(r->handler, "alias-forced-type",
+                                      NULL, r->pool);
            }
             /* XXX This is as SLOW as can be, next step, we optimize
              * and merge to whatever part of the found path was already
Index: modules/mappers/mod_dir.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/mappers/mod_dir.c,v
retrieving revision 1.34
diff -u -r1.34 mod_dir.c
--- modules/mappers/mod_dir.c   2001/08/23 21:05:42     1.34
+++ modules/mappers/mod_dir.c   2001/09/16 23:42:21
@@ -203,7 +203,7 @@
 
             apr_pool_join(r->pool, rr->pool);
             error_notfound = rr->status;
-            r->notes = apr_table_overlay(r->pool, r->notes, rr->notes);
+            apr_pool_userdata_overlay(r->pool, rr->pool);
             r->headers_out = apr_table_overlay(r->pool, r->headers_out,
                                             rr->headers_out);
             r->err_headers_out = apr_table_overlay(r->pool, r->err_headers_out,
Index: modules/mappers/mod_negotiation.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/mappers/mod_negotiation.c,v
retrieving revision 1.81
diff -u -r1.81 mod_negotiation.c
--- modules/mappers/mod_negotiation.c   2001/08/30 13:37:16     1.81
+++ modules/mappers/mod_negotiation.c   2001/09/16 23:42:23
@@ -1091,11 +1091,10 @@
          * it's an insignificant file (e.g. did not identify a 
          * language, charset, encoding, content type or handler,)
          */
-        exception_list = 
-            (apr_array_header_t *)apr_table_get(sub_req->notes, 
-                                                "ap-mime-exceptions-list");
-
-        if (!exception_list) {
+        if ((apr_pool_userdata_get((void **)&exception_list,
+                                   "ap-mime-exceptions-list",
+                                   sub_req->pool) != APR_SUCCESS)
+            || !exception_list) {
             ap_destroy_sub_req(sub_req);
             continue;
         }
@@ -2476,11 +2475,12 @@
 static void store_variant_list(request_rec *r, negotiation_state *neg)
 {
     if (r->main == NULL) {
-        apr_table_setn(r->notes, "variant-list", make_variant_list(r, neg));
+        apr_pool_userdata_set(make_variant_list(r, neg), "variant-list",
+                              NULL, r->pool);
     }
     else {
-        apr_table_setn(r->main->notes, "variant-list",
-                      make_variant_list(r->main, neg));
+        apr_pool_userdata_set(make_variant_list(r->main, neg), "variant-list",
+                              NULL, r->main->pool);
     }
 }
 
Index: modules/mappers/mod_rewrite.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/mappers/mod_rewrite.c,v
retrieving revision 1.82
diff -u -r1.82 mod_rewrite.c
--- modules/mappers/mod_rewrite.c       2001/08/15 21:11:58     1.82
+++ modules/mappers/mod_rewrite.c       2001/09/16 23:42:26
@@ -1296,8 +1296,8 @@
     const char *t;
 
     /* now check if we have to force a MIME-type */
-    t = apr_table_get(r->notes, REWRITE_FORCED_MIMETYPE_NOTEVAR);
-    if (t == NULL) {
+    if ((apr_pool_userdata_get((void **)&t, REWRITE_FORCED_MIMETYPE_NOTEVAR,
+                               r->pool) != APR_SUCCESS) || !t) {
         return DECLINED;
     }
     else {
@@ -1871,7 +1871,7 @@
                 /*  One condition is false, but another can be
                  *  still true, so we have to continue...
                  */
-               apr_table_unset(r->notes, VARY_KEY_THIS);
+               apr_pool_userdata_set(NULL, VARY_KEY_THIS, NULL, r->pool);
                 continue;
             }
             else {
@@ -1897,16 +1897,25 @@
                 break;
             }
         }
-       vary = apr_table_get(r->notes, VARY_KEY_THIS);
-       if (vary != NULL) {
-           apr_table_merge(r->notes, VARY_KEY, vary);
-           apr_table_unset(r->notes, VARY_KEY_THIS);
+        if ((apr_pool_userdata_get((void **)&vary, VARY_KEY_THIS, r->pool) !=
+             APR_SUCCESS) || !vary) {
+            char *old_vary;
+            if ((apr_pool_userdata_get((void **)&old_vary, VARY_KEY, r->pool)
+                 != APR_SUCCESS) || !old_vary) {
+                apr_pool_userdata_set(vary, VARY_KEY, NULL, r->pool);
+            }
+            else {
+                apr_pool_userdata_set(apr_pstrcat(r->pool, old_vary, ", ",
+                                                  vary),
+                                      VARY_KEY, NULL, r->pool);
+            }
+           apr_pool_userdata_set(NULL, VARY_KEY_THIS, NULL, r->pool);
        }
     }
     /*  if any condition fails the complete rule fails  */
     if (failed) {
-        apr_table_unset(r->notes, VARY_KEY);
-        apr_table_unset(r->notes, VARY_KEY_THIS);
+        apr_pool_userdata_set(NULL, VARY_KEY, NULL, r->pool);
+        apr_pool_userdata_set(NULL, VARY_KEY_THIS, NULL, r->pool);
         return 0;
     }
 
@@ -1915,9 +1924,10 @@
      * if any of the request header fields were involved, and add them
      * to the Vary field of the response.
      */
-    if ((vary = apr_table_get(r->notes, VARY_KEY)) != NULL) {
+    if ((apr_pool_userdata_get((void **)&vary, VARY_KEY, r->pool) ==
+         APR_SUCCESS) && vary) {
         apr_table_merge(r->headers_out, "Vary", vary);
-       apr_table_unset(r->notes, VARY_KEY);
+       apr_pool_userdata_set(NULL, VARY_KEY, NULL, r->pool);
     }
 
     /*
@@ -1936,8 +1946,9 @@
                  */
                 rewritelog(r, 2, "remember %s to have MIME-type '%s'",
                            r->filename, p->forced_mimetype);
-                apr_table_setn(r->notes, REWRITE_FORCED_MIMETYPE_NOTEVAR,
-                              p->forced_mimetype);
+                apr_pool_userdata_set(p->forced_mimetype,
+                                      REWRITE_FORCED_MIMETYPE_NOTEVAR,
+                                      NULL, r->pool);
             }
             else {
                 /* In per-directory context we operate in the Fixup API hook
@@ -2092,8 +2103,8 @@
      *  already processed) because a sub-request happens ;-)
      */
     if (p->forced_mimetype != NULL) {
-        apr_table_setn(r->notes, REWRITE_FORCED_MIMETYPE_NOTEVAR,
-                      p->forced_mimetype);
+        apr_pool_userdata_set(p->forced_mimetype,
+                              REWRITE_FORCED_MIMETYPE_NOTEVAR, NULL, r->pool);
         if (perdir == NULL) {
             rewritelog(r, 2, "remember %s to have MIME-type '%s'",
                        r->filename, p->forced_mimetype);
@@ -3558,7 +3569,8 @@
     /* all other env-variables from the parent Apache process */
     else if (strlen(var) > 4 && strncasecmp(var, "ENV:", 4) == 0) {
         /* first try the internal Apache notes structure */
-        result = apr_table_get(r->notes, var+4);
+        result = NULL;
+        apr_pool_userdata_get((void **)&result, var+4, r->pool);
         /* second try the internal Apache env structure  */
         if (result == NULL) {
             result = apr_table_get(r->subprocess_env, var+4);
@@ -3638,7 +3650,16 @@
             continue;
         }
         if (strcasecmp(hdrs[i].key, name) == 0) {
-           apr_table_merge(r->notes, VARY_KEY_THIS, name);
+            char *old_vary;
+            if ((apr_pool_userdata_get((void **)&old_vary, VARY_KEY, r->pool)
+                 != APR_SUCCESS) || !old_vary) {
+                apr_pool_userdata_set(name, VARY_KEY, NULL, r->pool);
+            }
+            else {
+                apr_pool_userdata_set(apr_pstrcat(r->pool, old_vary, ", ",
+                                                  name),
+                                      VARY_KEY, NULL, r->pool);
+            }
             return hdrs[i].val;
         }
     }
Index: modules/mappers/mod_rewrite.h
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/mappers/mod_rewrite.h,v
retrieving revision 1.25
diff -u -r1.25 mod_rewrite.h
--- modules/mappers/mod_rewrite.h       2001/05/18 18:38:42     1.25
+++ modules/mappers/mod_rewrite.h       2001/09/16 23:42:26
@@ -124,7 +124,7 @@
 #include "http_vhost.h"
 
     /*
-     * The key in the r->notes apr_table_t wherein we store our accumulated
+     * The key in the r->pool userdata wherein we store our accumulated
      * Vary values, and the one used for per-condition checks in a chain.
      */
 #define VARY_KEY "rewrite-Vary"
Index: modules/mappers/mod_speling.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/mappers/mod_speling.c,v
retrieving revision 1.32
diff -u -r1.32 mod_speling.c
--- modules/mappers/mod_speling.c       2001/02/16 04:26:40     1.32
+++ modules/mappers/mod_speling.c       2001/09/16 23:42:27
@@ -445,7 +445,6 @@
          */
         else {
             apr_pool_t *p;
-            apr_table_t *notes;
            apr_pool_t *sub_pool;
            apr_array_header_t *t;
            apr_array_header_t *v;
@@ -453,11 +452,9 @@
 
             if (r->main == NULL) {
                 p = r->pool;
-                notes = r->notes;
             }
             else {
                 p = r->main->pool;
-                notes = r->main->notes;
             }
 
            if (apr_pool_create(&sub_pool, p) != APR_SUCCESS)
@@ -533,7 +530,8 @@
 
 
             /* Pass our apr_table_t to http_protocol.c (see mod_negotiation): */
-            apr_table_setn(notes, "variant-list", apr_array_pstrcat(p, t, 0));
+            apr_pool_userdata_set(apr_array_pstrcat(p, t, 0), "variant-list",
+                                  NULL, p);
 
            apr_table_mergen(r->subprocess_env, "VARIANTS",
                            apr_array_pstrcat(p, v, ','));
Index: modules/mappers/mod_userdir.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/mappers/mod_userdir.c,v
retrieving revision 1.40
diff -u -r1.40 mod_userdir.c
--- modules/mappers/mod_userdir.c       2001/09/07 14:52:00     1.40
+++ modules/mappers/mod_userdir.c       2001/09/16 23:42:27
@@ -345,7 +345,7 @@
                r->finfo = statbuf;
 
             /* For use in the get_suexec_identity phase */
-            apr_table_setn(r->notes, "mod_userdir_user", w);
+            apr_pool_userdata_set(w, "mod_userdir_user", NULL, r->pool);
 
             return OK;
         }
@@ -359,9 +359,10 @@
 {
     ap_unix_identity_t *ugid = NULL;
 #if APR_HAS_USER
-    const char *username = apr_table_get(r->notes, "mod_userdir_user");
+    const char *username;
 
-    if (username == NULL) {
+    if ((apr_pool_userdata_get((void **)&username, "mod_userdir_user",
+                               r->pool) != APR_SUCCESS) || !username) {
         return NULL;
     }
 
Index: modules/mappers/mod_vhost_alias.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/mappers/mod_vhost_alias.c,v
retrieving revision 1.25
diff -u -r1.25 mod_vhost_alias.c
--- modules/mappers/mod_vhost_alias.c   2001/02/24 11:23:31     1.25
+++ modules/mappers/mod_vhost_alias.c   2001/09/16 23:42:27
@@ -466,7 +466,7 @@
     if (cgi) {
        /* see is_scriptaliased() in mod_cgi */
        r->handler = "cgi-script";
-       apr_table_setn(r->notes, "alias-forced-type", r->handler);
+       apr_pool_userdata_set(r->handler, "alias-forced-type", NULL, r->pool);
     }
 
     return OK;
Index: modules/metadata/mod_setenvif.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/metadata/mod_setenvif.c,v
retrieving revision 1.30
diff -u -r1.30 mod_setenvif.c
--- modules/metadata/mod_setenvif.c     2001/06/12 17:06:01     1.30
+++ modules/metadata/mod_setenvif.c     2001/09/16 23:42:28
@@ -404,6 +404,7 @@
  */
 static int match_headers(request_rec *r)
 {
+    void *data;
     sei_cfg_rec *sconf;
     sei_entry *entries;
     apr_table_entry_t *elts;
@@ -411,8 +412,10 @@
     int i, j;
     char *last_name;
 
-    if (apr_table_get(r->notes, SEI_MAGIC_HEIRLOOM) == NULL) {
-       apr_table_set(r->notes, SEI_MAGIC_HEIRLOOM, "post-read done");
+    if ((apr_pool_userdata_get(&data, SEI_MAGIC_HEIRLOOM, r->pool) !=
+         APR_SUCCESS) || !data) {
+       apr_pool_userdata_set("post-read-done", SEI_MAGIC_HEIRLOOM,
+                              NULL, r->pool);
        sconf  = (sei_cfg_rec *) ap_get_module_config(r->server->module_config,
                                                      &setenvif_module);
     }
Index: modules/metadata/mod_usertrack.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/metadata/mod_usertrack.c,v
retrieving revision 1.33
diff -u -r1.33 mod_usertrack.c
--- modules/metadata/mod_usertrack.c    2001/08/29 12:29:36     1.33
+++ modules/metadata/mod_usertrack.c    2001/09/16 23:42:28
@@ -194,7 +194,8 @@
     apr_table_setn(r->headers_out,
                    (dcfg->style == CT_COOKIE2 ? "Set-Cookie2" : "Set-Cookie"),
                    new_cookie);
-    apr_table_setn(r->notes, "cookie", apr_pstrdup(r->pool, cookiebuf));   /* log 
first time */
+    apr_pool_userdata_set(apr_pstrdup(r->pool, cookiebuf), "cookie", NULL,
+                          r->pool);   /* log first time */
     return;
 }
 
@@ -223,7 +224,7 @@
                 *cookieend = '\0';      /* Ignore anything after a ; */
 
             /* Set the cookie in a note, for logging */
-            apr_table_setn(r->notes, "cookie", cookiebuf);
+            apr_pool_userdata_set(cookiebuf, "cookie", NULL, r->pool);
 
             return DECLINED;    /* There's already a cookie, no new one */
         }
Index: server/config.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/server/config.c,v
retrieving revision 1.134
diff -u -r1.134 config.c
--- server/config.c     2001/08/23 19:13:53     1.134
+++ server/config.c     2001/09/16 23:42:29
@@ -1525,9 +1525,9 @@
                              "%s pcfg_openfile: unable to check htaccess file, "
                              "ensure it is readable",
                              filename);
-               apr_table_setn(r->notes, "error-notes",
-                             "Server unable to read htaccess file, denying "
-                             "access to be safe");
+               apr_pool_userdata_set("Server unable to read htaccess file, "
+                                      "denying access to be safe",
+                                      "error-notes", NULL, r->pool);
                return HTTP_FORBIDDEN;
            }
         }
Index: server/log.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/server/log.c,v
retrieving revision 1.96
diff -u -r1.96 log.c
--- server/log.c        2001/07/30 17:55:38     1.96
+++ server/log.c        2001/09/16 23:42:30
@@ -490,6 +490,7 @@
                                const char *fmt, ...)
 {
     va_list args;
+    void *data;
 
     va_start(args, fmt);
     log_error_core(file, line, level, status, r->server, r, NULL, fmt, args);
@@ -504,10 +505,13 @@
     va_end(args);
     va_start(args,fmt); 
     if (((level & APLOG_LEVELMASK) <= APLOG_WARNING)
-       && (apr_table_get(r->notes, "error-notes") == NULL)) {
-       apr_table_setn(r->notes, "error-notes",
-                     ap_escape_html(r->pool, apr_pvsprintf(r->pool, fmt, 
-                     args)));
+       &&
+        ((apr_pool_userdata_get(&data, "error-notes", r->pool) != APR_SUCCESS)
+         || !data)) {
+       apr_pool_userdata_set(ap_escape_html(r->pool,
+                                             apr_pvsprintf(r->pool, fmt,
+                                                           args)),
+                              "error-notes", NULL, r->pool);
     }
     va_end(args);
 }
Index: server/protocol.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/server/protocol.c,v
retrieving revision 1.44
diff -u -r1.44 protocol.c
--- server/protocol.c   2001/09/11 18:38:21     1.44
+++ server/protocol.c   2001/09/16 23:42:31
@@ -498,9 +498,10 @@
         if (r->server->limit_req_fields &&
             (++fields_read > r->server->limit_req_fields)) {
             r->status = HTTP_BAD_REQUEST;
-            apr_table_setn(r->notes, "error-notes",
-                          "The number of request header fields exceeds "
-                          "this server's limit.");
+            apr_pool_userdata_set("error-notes",
+                                  "The number of request header fields "
+                                  "exceeds this server's limit.",
+                                  NULL, r->pool);
             return;
         }
         /* ap_getline returns (size of max buffer - 1) if it fills up the
@@ -509,13 +510,13 @@
          */
         if (len > r->server->limit_req_fieldsize) {
             r->status = HTTP_BAD_REQUEST;
-            apr_table_setn(r->notes, "error-notes",
-                          apr_pstrcat(r->pool,
-                                      "Size of a request header field "
-                                      "exceeds server limit.<br />\n"
-                                      "<pre>\n",
-                                      ap_escape_html(r->pool, field),
-                                      "</pre>\n", NULL));
+            apr_pool_userdata_set(apr_pstrcat(r->pool,
+                                              "Size of a request header field "
+                                              "exceeds server limit.<br />\n"
+                                              "<pre>\n",
+                                              ap_escape_html(r->pool, field),
+                                              "</pre>\n", NULL),
+                                  "error-notes", NULL, r->pool);
             return;
         }
         copy = apr_palloc(r->pool, len + 1);
@@ -523,13 +524,13 @@
 
         if (!(value = strchr(copy, ':'))) {     /* Find the colon separator */
             r->status = HTTP_BAD_REQUEST;       /* or abort the bad request */
-            apr_table_setn(r->notes, "error-notes",
-                          apr_pstrcat(r->pool,
-                                      "Request header field is missing "
-                                      "colon separator.<br />\n"
-                                      "<pre>\n",
-                                      ap_escape_html(r->pool, copy),
-                                      "</pre>\n", NULL));
+            apr_pool_userdata_set(apr_pstrcat(r->pool,
+                                              "Request header field is "
+                                              "missing colon separator."
+                                              "<br />\n<pre>\n",
+                                              ap_escape_html(r->pool, copy),
+                                              "</pre>\n", NULL),
+                                  "error-notes", NULL, r->pool);
             return;
         }
 
@@ -570,7 +571,6 @@
     r->subprocess_env  = apr_table_make(r->pool, 50);
     r->headers_out     = apr_table_make(r->pool, 12);
     r->err_headers_out = apr_table_make(r->pool, 5);
-    r->notes           = apr_table_make(r->pool, 5);
 
     r->request_config  = ap_create_request_config(r->pool);
     ap_run_create_request(r);
@@ -720,7 +720,6 @@
     rnew->subprocess_env  = apr_table_copy(rnew->pool, r->subprocess_env);
     rnew->headers_out     = apr_table_make(rnew->pool, 5);
     rnew->err_headers_out = apr_table_make(rnew->pool, 5);
-    rnew->notes           = apr_table_make(rnew->pool, 5);
 
     rnew->expecting_100   = r->expecting_100;
     rnew->read_length     = r->read_length;
Index: srclib/apr/include/apr_pools.h
===================================================================
RCS file: /home/cvspublic/apr/include/apr_pools.h,v
retrieving revision 1.59
diff -u -r1.59 apr_pools.h
--- srclib/apr/include/apr_pools.h      2001/08/15 21:02:53     1.59
+++ srclib/apr/include/apr_pools.h      2001/09/16 23:42:31
@@ -298,6 +298,14 @@
                                            apr_pool_t *cont);
 
 /**
+ * Overlay a copy of one pool's userdata onto another
+ * @param base The target pool
+ * @param add The source pool
+ */
+APR_DECLARE(apr_status_t) apr_pool_userdata_overlay(apr_pool_t *base,
+                                                    const apr_pool_t *add);
+
+/**
  * Clear all memory in the pool and run all the cleanups. This also clears all
  * subpools.
  * @param p The pool to clear
Index: srclib/apr/memory/unix/apr_pools.c
===================================================================
RCS file: /home/cvspublic/apr/memory/unix/apr_pools.c,v
retrieving revision 1.109
diff -u -r1.109 apr_pools.c
--- srclib/apr/memory/unix/apr_pools.c  2001/09/02 18:11:33     1.109
+++ srclib/apr/memory/unix/apr_pools.c  2001/09/16 23:42:33
@@ -1201,7 +1201,9 @@
         apr_hash_set(cont->prog_data, key, keylen, data);
     }
 
-    apr_pool_cleanup_register(cont, data, cleanup, cleanup);
+    if (cleanup) {
+        apr_pool_cleanup_register(cont, data, cleanup, cleanup);
+    }
     return APR_SUCCESS;
 }
 
@@ -1211,6 +1213,38 @@
         *data = NULL;
     else
         *data = apr_hash_get(cont->prog_data, key, strlen(key));
+    return APR_SUCCESS;
+}
+
+APR_DECLARE(apr_status_t) apr_pool_userdata_overlay(apr_pool_t *base,
+                                                    const apr_pool_t *add)
+{
+    apr_hash_index_t *iter;
+    const void *key;
+    apr_ssize_t klen;
+    void *val;
+
+#ifdef POOL_DEBUG
+    if (!apr_pool_is_ancestor(base, add)) {
+       fprintf(stderr, "apr_pool_userdata_overlay: base is not ancestor of add\n");
+        return APR_EGENERAL;
+    }
+#endif /* POOL_DEBUG */
+
+    if (add->prog_data == NULL) {
+        return APR_SUCCESS;
+    }
+
+    if (base->prog_data == NULL) {
+        base->prog_data = apr_hash_make(base);
+    }
+
+    for (iter = apr_hash_first(base, add->prog_data); iter;
+         iter = apr_hash_next(iter)) {
+        apr_hash_this(iter, &key, &klen, &val);
+        apr_hash_set(base->prog_data, key, klen, val);
+    }
+
     return APR_SUCCESS;
 }
 

Reply via email to