You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apreq-cvs@httpd.apache.org by jo...@apache.org on 2004/11/30 08:06:37 UTC

svn commit: r106989 - in httpd/apreq/trunk: . env glue/perl/xsbuilder/Apache/Upload src t

Author: joes
Date: Mon Nov 29 23:06:36 2004
New Revision: 106989

URL: http://svn.apache.org/viewcvs?view=rev&rev=106989
Log:
  Add apreq_env_bucket_alloc() to get an allocator directly from the
  environment instead of creating them from a pool.  This is an
  ABI change, starting with libapreq2-2.0.23.

Modified:
   httpd/apreq/trunk/CHANGES
   httpd/apreq/trunk/STATUS
   httpd/apreq/trunk/env/mod_apreq.c
   httpd/apreq/trunk/glue/perl/xsbuilder/Apache/Upload/Apache__Upload.h
   httpd/apreq/trunk/src/apreq_env.c
   httpd/apreq/trunk/src/apreq_env.h
   httpd/apreq/trunk/src/apreq_parsers.c
   httpd/apreq/trunk/src/apreq_version.h
   httpd/apreq/trunk/t/parsers.c
   httpd/apreq/trunk/t/testall.c

Modified: httpd/apreq/trunk/CHANGES
Url: http://svn.apache.org/viewcvs/httpd/apreq/trunk/CHANGES?view=diff&rev=106989&p1=httpd/apreq/trunk/CHANGES&r1=106988&p2=httpd/apreq/trunk/CHANGES&r2=106989
==============================================================================
--- httpd/apreq/trunk/CHANGES	(original)
+++ httpd/apreq/trunk/CHANGES	Mon Nov 29 23:06:36 2004
@@ -5,6 +5,11 @@
 @section v2_05 Changes with libapreq2-2.05
 
 
+- C API [joes]
+  Add apreq_env_bucket_alloc() to get an allocator directly from the
+  environment instead of creating them from a pool.  This is an
+  ABI change, starting with libapreq2.so.2.0.23.
+
 - Build system [joes]
   Add --with-apache2-httpd option so users can override apxs's
   notion of where the httpd executable is.  XSBuilder's header

Modified: httpd/apreq/trunk/STATUS
Url: http://svn.apache.org/viewcvs/httpd/apreq/trunk/STATUS?view=diff&rev=106989&p1=httpd/apreq/trunk/STATUS&r1=106988&p2=httpd/apreq/trunk/STATUS&r2=106989
==============================================================================
--- httpd/apreq/trunk/STATUS	(original)
+++ httpd/apreq/trunk/STATUS	Mon Nov 29 23:06:36 2004
@@ -49,9 +49,6 @@
     - There are too many calls to apreq_env_pool()- lots of these
       can be eliminated by caching the pool in the parser's context.
 
-    - Add apreq_env_bucket_alloc(env) function to get a per-request 
-      bucket allocator, which will help the parsers to conserve memory.
-
     - in glue/perl/t/apreq/cgi.t on Win32, printing to the error log
       hangs if the strings involved are about 10000 in size.
       This doesn't occur in the env/cgi tests - why?

Modified: httpd/apreq/trunk/env/mod_apreq.c
Url: http://svn.apache.org/viewcvs/httpd/apreq/trunk/env/mod_apreq.c?view=diff&rev=106989&p1=httpd/apreq/trunk/env/mod_apreq.c&r1=106988&p2=httpd/apreq/trunk/env/mod_apreq.c&r2=106989
==============================================================================
--- httpd/apreq/trunk/env/mod_apreq.c	(original)
+++ httpd/apreq/trunk/env/mod_apreq.c	Mon Nov 29 23:06:36 2004
@@ -169,7 +169,7 @@
 
 
 #define APREQ_MODULE_NAME               "APACHE2"
-#define APREQ_MODULE_MAGIC_NUMBER       20041119
+#define APREQ_MODULE_MAGIC_NUMBER       20041130
 
 static void apache2_log(const char *file, int line, int level, 
                         apr_status_t status, void *env, const char *fmt,
@@ -193,6 +193,12 @@
     return r->pool;
 }
 
+static apr_bucket_alloc_t *apache2_bucket_alloc(void *env)
+{
+    dR;
+    return r->connection->bucket_alloc;
+}
+
 static const char *apache2_header_in(void *env, const char *name)
 {
     dR;
@@ -364,7 +370,7 @@
         }
     }
 
-    alloc = apr_bucket_alloc_create(r->pool);
+    alloc = r->connection->bucket_alloc;
     ctx = apr_palloc(r->pool, sizeof *ctx);
 
     f->ctx       = ctx;

Modified: httpd/apreq/trunk/glue/perl/xsbuilder/Apache/Upload/Apache__Upload.h
Url: http://svn.apache.org/viewcvs/httpd/apreq/trunk/glue/perl/xsbuilder/Apache/Upload/Apache__Upload.h?view=diff&rev=106989&p1=httpd/apreq/trunk/glue/perl/xsbuilder/Apache/Upload/Apache__Upload.h&r1=106988&p2=httpd/apreq/trunk/glue/perl/xsbuilder/Apache/Upload/Apache__Upload.h&r2=106989
==============================================================================
--- httpd/apreq/trunk/glue/perl/xsbuilder/Apache/Upload/Apache__Upload.h	(original)
+++ httpd/apreq/trunk/glue/perl/xsbuilder/Apache/Upload/Apache__Upload.h	Mon Nov 29 23:06:36 2004
@@ -150,7 +150,7 @@
 
     upload = apreq_make_param(p, name, nlen, value, vlen);
 
-    upload->bb = apr_brigade_create(p, apr_bucket_alloc_create(p));
+    upload->bb = apr_brigade_create(p, apreq_env_bucket_alloc(env));
     b = apr_bucket_file_create(f, 0, finfo.size, p, upload->bb->bucket_alloc);
     APR_BRIGADE_INSERT_TAIL(upload->bb, b);
     b = apr_bucket_immortal_create("", 0, upload->bb->bucket_alloc);

Modified: httpd/apreq/trunk/src/apreq_env.c
Url: http://svn.apache.org/viewcvs/httpd/apreq/trunk/src/apreq_env.c?view=diff&rev=106989&p1=httpd/apreq/trunk/src/apreq_env.c&r1=106988&p2=httpd/apreq/trunk/src/apreq_env.c&r2=106989
==============================================================================
--- httpd/apreq/trunk/src/apreq_env.c	(original)
+++ httpd/apreq/trunk/src/apreq_env.c	Mon Nov 29 23:06:36 2004
@@ -53,6 +53,11 @@
     return apreq_env->pool(env);
 }
 
+APREQ_DECLARE(apr_bucket_alloc_t *) apreq_env_bucket_alloc(void *env)
+{
+    return apreq_env->bucket_alloc(env);
+}
+
 APREQ_DECLARE(apreq_jar_t *) apreq_env_jar(void *env, apreq_jar_t *jar)
 {
     return apreq_env->jar(env,jar);
@@ -145,11 +150,16 @@
 
 
 #define APREQ_MODULE_NAME         "CGI"
-#define APREQ_MODULE_MAGIC_NUMBER 20040913
+#define APREQ_MODULE_MAGIC_NUMBER 20041130
 
 static apr_pool_t *cgi_pool(void *env)
 {
     return (apr_pool_t *)env;
+}
+
+static apr_bucket_alloc_t *cgi_bucket_alloc(void *env)
+{
+    return apr_bucket_alloc_create((apr_pool_t *)env);
 }
 
 static const char *cgi_query_string(void *env)

Modified: httpd/apreq/trunk/src/apreq_env.h
Url: http://svn.apache.org/viewcvs/httpd/apreq/trunk/src/apreq_env.h?view=diff&rev=106989&p1=httpd/apreq/trunk/src/apreq_env.h&r1=106988&p2=httpd/apreq/trunk/src/apreq_env.h&r2=106989
==============================================================================
--- httpd/apreq/trunk/src/apreq_env.h	(original)
+++ httpd/apreq/trunk/src/apreq_env.h	Mon Nov 29 23:06:36 2004
@@ -93,6 +93,14 @@
 APREQ_DECLARE(apr_pool_t *) apreq_env_pool(void *env);
 
 /**
+ * Bucket allocator associated with the environment.
+ * @param env The current environment
+ * @return The associated bucket allocator.
+ */
+
+APREQ_DECLARE(apr_bucket_alloc_t *) apreq_env_bucket_alloc(void *env);
+
+/**
  * Get/set the jar currently associated to the environment.
  * @param env The current environment.
  * @param jar New Jar to associate.
@@ -238,6 +246,7 @@
     apr_uint32_t magic_number;
     void (*log)(const char *,int,int,apr_status_t,void *,const char *,va_list);
     apr_pool_t *(*pool)(void *);
+    apr_bucket_alloc_t *(*bucket_alloc)(void *);
     apreq_jar_t *(*jar)(void *,apreq_jar_t *);
     apreq_request_t *(*request)(void *,apreq_request_t *);
     const char *(*query_string)(void *);
@@ -259,9 +268,9 @@
  * @param mmn Magic number (i.e. version number) of this environment.
  */
 #define APREQ_ENV_MODULE(pre, name, mmn) const apreq_env_t pre##_module = { \
-  name, mmn, pre##_log, pre##_pool, pre##_jar, pre##_request,               \
-  pre##_query_string, pre##_header_in, pre##_header_out, pre##_read,        \
-  pre##_temp_dir, pre##_max_body, pre##_max_brigade }
+  name, mmn, pre##_log, pre##_pool, pre##_bucket_alloc, pre##_jar,          \
+  pre##_request, pre##_query_string, pre##_header_in, pre##_header_out,     \
+  pre##_read, pre##_temp_dir, pre##_max_body, pre##_max_brigade }
 
 
 /**

Modified: httpd/apreq/trunk/src/apreq_parsers.c
Url: http://svn.apache.org/viewcvs/httpd/apreq/trunk/src/apreq_parsers.c?view=diff&rev=106989&p1=httpd/apreq/trunk/src/apreq_parsers.c&r1=106988&p2=httpd/apreq/trunk/src/apreq_parsers.c&r2=106989
==============================================================================
--- httpd/apreq/trunk/src/apreq_parsers.c	(original)
+++ httpd/apreq/trunk/src/apreq_parsers.c	Mon Nov 29 23:06:36 2004
@@ -244,7 +244,7 @@
     struct url_ctx *ctx;
 
     if (parser->ctx == NULL) {
-        apr_bucket_alloc_t *bb_alloc = apr_bucket_alloc_create(pool);
+        apr_bucket_alloc_t *bb_alloc = apreq_env_bucket_alloc(env);
         ctx = apr_palloc(pool, sizeof *ctx);
         ctx->bb = apr_brigade_create(pool, bb_alloc);
         parser->ctx = ctx;
@@ -439,7 +439,7 @@
     struct hdr_ctx *ctx;
 
     if (parser->ctx == NULL) {
-        apr_bucket_alloc_t *bb_alloc = apr_bucket_alloc_create(pool);
+        apr_bucket_alloc_t *bb_alloc = apreq_env_bucket_alloc(env);
         ctx = apr_pcalloc(pool, sizeof *ctx);
         ctx->bb = apr_brigade_create(pool, bb_alloc);
         parser->ctx = ctx;
@@ -850,7 +850,7 @@
     char *ct;
     apr_size_t blen;
     apr_pool_t *pool = apreq_env_pool(env);
-    apr_bucket_alloc_t *bucket_alloc = apr_bucket_alloc_create(pool);
+    apr_bucket_alloc_t *bucket_alloc = apreq_env_bucket_alloc(env);
     struct mfd_ctx *ctx = apr_palloc(pool, sizeof *ctx);
 
     ctx->status = MFD_INIT;
@@ -1282,8 +1282,7 @@
         ctx->status = GEN_INCOMPLETE;
         ctx->param = apreq_make_param(pool, 
                                       "_dummy_", strlen("_dummy_"), "", 0);
-        ctx->param->bb = apr_brigade_create(pool, 
-                                            apr_bucket_alloc_create(pool));
+        ctx->param->bb = apr_brigade_create(pool, apreq_env_bucket_alloc(env));
         ctx->param->info = apr_table_make(pool, APREQ_NELTS);
     }
 

Modified: httpd/apreq/trunk/src/apreq_version.h
Url: http://svn.apache.org/viewcvs/httpd/apreq/trunk/src/apreq_version.h?view=diff&rev=106989&p1=httpd/apreq/trunk/src/apreq_version.h&r1=106988&p2=httpd/apreq/trunk/src/apreq_version.h&r2=106989
==============================================================================
--- httpd/apreq/trunk/src/apreq_version.h	(original)
+++ httpd/apreq/trunk/src/apreq_version.h	Mon Nov 29 23:06:36 2004
@@ -61,7 +61,7 @@
 #define APREQ_MINOR_VERSION       0
 
 /** patch level */
-#define APREQ_PATCH_VERSION      22
+#define APREQ_PATCH_VERSION      23
 
 /** 
  *  This symbol is defined for internal, "development" copies of libapreq.

Modified: httpd/apreq/trunk/t/parsers.c
Url: http://svn.apache.org/viewcvs/httpd/apreq/trunk/t/parsers.c?view=diff&rev=106989&p1=httpd/apreq/trunk/t/parsers.c&r1=106988&p2=httpd/apreq/trunk/t/parsers.c&r2=106989
==============================================================================
--- httpd/apreq/trunk/t/parsers.c	(original)
+++ httpd/apreq/trunk/t/parsers.c	Mon Nov 29 23:06:36 2004
@@ -318,7 +318,7 @@
     apr_status_t rv;
     apreq_param_t *dummy;
     apreq_request_t *req = apreq_request(APREQ_XML_ENCTYPE, "");
-    apr_bucket_brigade *bb = apr_brigade_create(p, 
+    apr_bucket_brigade *bb = apr_brigade_create(p,
                                    apr_bucket_alloc_create(p));
     apr_bucket *e = apr_bucket_immortal_create(xml_data,
                                                    strlen(xml_data),

Modified: httpd/apreq/trunk/t/testall.c
Url: http://svn.apache.org/viewcvs/httpd/apreq/trunk/t/testall.c?view=diff&rev=106989&p1=httpd/apreq/trunk/t/testall.c&r1=106988&p2=httpd/apreq/trunk/t/testall.c&r2=106989
==============================================================================
--- httpd/apreq/trunk/t/testall.c	(original)
+++ httpd/apreq/trunk/t/testall.c	Mon Nov 29 23:06:36 2004
@@ -66,6 +66,11 @@
     return p;
 }
 
+static apr_bucket_alloc_t *test_bucket_alloc(void *env)
+{
+    return apr_bucket_alloc_create(p);
+}
+
 static const char *test_header_in(void *env, const char *name)
 {
     return env;