Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Apache: CVS
svn commit: r1240478 - in /httpd/httpd/branches/2.4.x: ./ include/ap_mmn.h include/http_core.h include/httpd.h server/core.c server/core_filters.c server/mpm/winnt/child.c server/mpm/winnt/mpm_winnt.c server/mpm/winnt/mpm_winnt.h
 

Index | Next | Previous | View Flat


sf at apache

Feb 4, 2012, 2:05 AM


Views: 35
Permalink
svn commit: r1240478 - in /httpd/httpd/branches/2.4.x: ./ include/ap_mmn.h include/http_core.h include/httpd.h server/core.c server/core_filters.c server/mpm/winnt/child.c server/mpm/winnt/mpm_winnt.c server/mpm/winnt/mpm_winnt.h

Author: sf
Date: Sat Feb 4 10:04:59 2012
New Revision: 1240478

URL: http://svn.apache.org/viewvc?rev=1240478&view=rev
Log:
Merge r1235019, r1236122, r1240470:

Make the core input/output filter contexts private and provide a hook
to insert a custom bucket, for use bye mpm_winnt and mod_ftp.

This allows to add members to the context structs without breaking binary
compatibility.

This should be ABI back-compatible, so only a minor MMN bump.

Modified:
httpd/httpd/branches/2.4.x/ (props changed)
httpd/httpd/branches/2.4.x/include/ap_mmn.h
httpd/httpd/branches/2.4.x/include/http_core.h
httpd/httpd/branches/2.4.x/include/httpd.h
httpd/httpd/branches/2.4.x/server/core.c
httpd/httpd/branches/2.4.x/server/core_filters.c
httpd/httpd/branches/2.4.x/server/mpm/winnt/child.c
httpd/httpd/branches/2.4.x/server/mpm/winnt/mpm_winnt.c
httpd/httpd/branches/2.4.x/server/mpm/winnt/mpm_winnt.h

Propchange: httpd/httpd/branches/2.4.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Feb 4 10:04:59 2012
@@ -1,3 +1,3 @@
/httpd/httpd/branches/revert-ap-ldap:1150158-1150173
/httpd/httpd/branches/wombat-integration:723609-723841
-/httpd/httpd/trunk:1200496,1200556,1200702,1200955,1200968,1201032,1201042,1201111,1201194,1201198,1201202,1201450,1201956,1202236,1202453,1202456,1202886,1203400,1203714,1203859,1203980,1204630,1204968,1204990,1205061,1205075,1205379,1205885,1206291,1206472,1206587,1206850,1206940,1206978,1207719,1208753,1208835,1209053,1209085,1209417,1209432,1209461,1209601,1209603,1209618,1209623,1209741,1209754,1209766,1209776,1209797-1209798,1209811-1209812,1209814,1209908,1209910,1209913,1209916-1209917,1209947,1209952,1210067,1210080,1210120,1210124,1210130,1210148,1210219,1210221,1210252,1210284,1210336,1210378,1210725,1210892,1210951,1210954,1211351,1211364,1211490,1211495,1211528,1211663,1211680,1212872,1212883,1213338,1213381,1213391,1213567,1214003,1214005,1214015,1215514,1220462,1220467,1220493,1220524,1220570,1220768,1220794,1220826,1220846,1221205,1221292,1222335,1222370,1222473,1222915,1222917,1222921,1223048,1225060,1225197-1225199,1225223,1225380,1225476,1225478,1225791,12
25795-1225796,1226339,1226375,1227910,1228700,1228816,1229024,1229059,1229099,1229116,1229134,1229136,1229930,1230286,1231442,1231446,1231508,1231510,1231518,1232575,1232594,1232630,1232838,1234180,1234297,1234479,1234511,1234565,1234574,1234642-1234643,1234876,1234899,1236701,1237407,1238545,1238768,1239029-1239030,1239071,1239565,1240315
+/httpd/httpd/trunk:1200496,1200556,1200702,1200955,1200968,1201032,1201042,1201111,1201194,1201198,1201202,1201450,1201956,1202236,1202453,1202456,1202886,1203400,1203714,1203859,1203980,1204630,1204968,1204990,1205061,1205075,1205379,1205885,1206291,1206472,1206587,1206850,1206940,1206978,1207719,1208753,1208835,1209053,1209085,1209417,1209432,1209461,1209601,1209603,1209618,1209623,1209741,1209754,1209766,1209776,1209797-1209798,1209811-1209812,1209814,1209908,1209910,1209913,1209916-1209917,1209947,1209952,1210067,1210080,1210120,1210124,1210130,1210148,1210219,1210221,1210252,1210284,1210336,1210378,1210725,1210892,1210951,1210954,1211351,1211364,1211490,1211495,1211528,1211663,1211680,1212872,1212883,1213338,1213381,1213391,1213567,1214003,1214005,1214015,1215514,1220462,1220467,1220493,1220524,1220570,1220768,1220794,1220826,1220846,1221205,1221292,1222335,1222370,1222473,1222915,1222917,1222921,1223048,1225060,1225197-1225199,1225223,1225380,1225476,1225478,1225791,12
25795-1225796,1226339,1226375,1227910,1228700,1228816,1229024,1229059,1229099,1229116,1229134,1229136,1229930,1230286,1231442,1231446,1231508,1231510,1231518,1232575,1232594,1232630,1232838,1234180,1234297,1234479,1234511,1234565,1234574,1234642-1234643,1234876,1234899,1235019,1236122,1236701,1237407,1238545,1238768,1239029-1239030,1239071,1239565,1240315,1240470

Modified: httpd/httpd/branches/2.4.x/include/ap_mmn.h
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/include/ap_mmn.h?rev=1240478&r1=1240477&r2=1240478&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/include/ap_mmn.h (original)
+++ httpd/httpd/branches/2.4.x/include/ap_mmn.h Sat Feb 4 10:04:59 2012
@@ -385,6 +385,10 @@
* ap_proxy_table_unmerge(), proxy_lb_workers.
* 20120109.0 (2.4.1-dev) Changes sizeof(overrides_t) in core config.
* 20120109.1 (2.4.1-dev) remove sb_type in global_score.
+ * 20120109.2 (2.4.1-dev) Make core_output_filter_ctx_t and core_ctx_t
+ * private;
+ * move core_net rec definition to http_core.h;
+ * add insert_network_bucket hook, AP_DECLINED
*/

#define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */
@@ -392,7 +396,7 @@
#ifndef MODULE_MAGIC_NUMBER_MAJOR
#define MODULE_MAGIC_NUMBER_MAJOR 20120109
#endif
-#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 2 /* 0...n */

/**
* Determine if the server's current MODULE_MAGIC_NUMBER is at least a

Modified: httpd/httpd/branches/2.4.x/include/http_core.h
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/include/http_core.h?rev=1240478&r1=1240477&r2=1240478&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/include/http_core.h (original)
+++ httpd/httpd/branches/2.4.x/include/http_core.h Sat Feb 4 10:04:59 2012
@@ -689,6 +689,33 @@ apr_status_t ap_core_output_filter(ap_fi
AP_DECLARE(const char*) ap_get_server_protocol(server_rec* s);
AP_DECLARE(void) ap_set_server_protocol(server_rec* s, const char* proto);

+typedef struct core_output_filter_ctx core_output_filter_ctx_t;
+typedef struct core_filter_ctx core_ctx_t;
+
+typedef struct core_net_rec {
+ /** Connection to the client */
+ apr_socket_t *client_socket;
+
+ /** connection record */
+ conn_rec *c;
+
+ core_output_filter_ctx_t *out_ctx;
+ core_ctx_t *in_ctx;
+} core_net_rec;
+
+/**
+ * Insert the network bucket into the core input filter's input brigade.
+ * This hook is intended for MPMs or protocol modules that need to do special
+ * socket setup.
+ * @param c The connection
+ * @param bb The brigade to insert the bucket into
+ * @param socket The socket to put into a bucket
+ * @return AP_DECLINED if the current function does not handle this connection,
+ * APR_SUCCESS or an error otherwise.
+ */
+AP_DECLARE_HOOK(apr_status_t, insert_network_bucket,
+ (conn_rec *c, apr_bucket_brigade *bb, apr_socket_t *socket))
+
/* ----------------------------------------------------------------------
*
* Runtime status/management

Modified: httpd/httpd/branches/2.4.x/include/httpd.h
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/include/httpd.h?rev=1240478&r1=1240477&r2=1240478&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/include/httpd.h (original)
+++ httpd/httpd/branches/2.4.x/include/httpd.h Sat Feb 4 10:04:59 2012
@@ -386,6 +386,18 @@ extern "C" {
#endif

/**
+ * @defgroup APACHE_APR_STATUS_T HTTPD specific values of apr_status_t
+ * @{
+ */
+#define AP_START_USERERR (APR_OS_START_USERERR + 2000)
+#define AP_USERERR_LEN 1000
+
+/** The function declines to handle the request */
+#define AP_DECLINED (AP_START_USERERR + 0)
+
+/** @} */
+
+/**
* @brief The numeric version information is broken out into fields within this
* structure.
*/
@@ -1270,30 +1282,6 @@ struct server_rec {
void *context;
};

-typedef struct core_output_filter_ctx {
- apr_bucket_brigade *buffered_bb;
- apr_bucket_brigade *tmp_flush_bb;
- apr_pool_t *deferred_write_pool;
- apr_size_t bytes_in;
- apr_size_t bytes_written;
-} core_output_filter_ctx_t;
-
-typedef struct core_filter_ctx {
- apr_bucket_brigade *b;
- apr_bucket_brigade *tmpbb;
-} core_ctx_t;
-
-typedef struct core_net_rec {
- /** Connection to the client */
- apr_socket_t *client_socket;
-
- /** connection record */
- conn_rec *c;
-
- core_output_filter_ctx_t *out_ctx;
- core_ctx_t *in_ctx;
-} core_net_rec;
-
/**
* Get the context_document_root for a request. This is a generalization of
* the document root, which is too limited in the presence of mappers like

Modified: httpd/httpd/branches/2.4.x/server/core.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/server/core.c?rev=1240478&r1=1240477&r2=1240478&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/server/core.c (original)
+++ httpd/httpd/branches/2.4.x/server/core.c Sat Feb 4 10:04:59 2012
@@ -82,12 +82,18 @@

APR_HOOK_STRUCT(
APR_HOOK_LINK(get_mgmt_items)
+ APR_HOOK_LINK(insert_network_bucket)
)

AP_IMPLEMENT_HOOK_RUN_ALL(int, get_mgmt_items,
(apr_pool_t *p, const char *val, apr_hash_t *ht),
(p, val, ht), OK, DECLINED)

+AP_IMPLEMENT_HOOK_RUN_FIRST(apr_status_t, insert_network_bucket,
+ (conn_rec *c, apr_bucket_brigade *bb,
+ apr_socket_t *socket),
+ (c, bb, socket), AP_DECLINED)
+
/* Server core module... This module provides support for really basic
* server operations, including options and commands which control the
* operation of other modules. Consider this the bureaucracy module.
@@ -4729,6 +4735,15 @@ AP_DECLARE(apr_uint32_t) ap_random_pick(
return number;
}

+static apr_status_t core_insert_network_bucket(conn_rec *c,
+ apr_bucket_brigade *bb,
+ apr_socket_t *socket)
+{
+ apr_bucket *e = apr_bucket_socket_create(socket, c->bucket_alloc);
+ APR_BRIGADE_INSERT_TAIL(bb, e);
+ return APR_SUCCESS;
+}
+
static void core_dump_config(apr_pool_t *p, server_rec *s)
{
core_server_config *sconf = ap_get_core_module_config(s->module_config);
@@ -4803,6 +4818,8 @@ static void register_hooks(apr_pool_t *p
APR_HOOK_MIDDLE);
ap_hook_pre_mpm(ap_create_scoreboard, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_child_status(ap_core_child_status, NULL, NULL, APR_HOOK_MIDDLE);
+ ap_hook_insert_network_bucket(core_insert_network_bucket, NULL, NULL,
+ APR_HOOK_REALLY_LAST);

/* register the core's insert_filter hook and register core-provided
* filters

Modified: httpd/httpd/branches/2.4.x/server/core_filters.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/server/core_filters.c?rev=1240478&r1=1240477&r2=1240478&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/server/core_filters.c (original)
+++ httpd/httpd/branches/2.4.x/server/core_filters.c Sat Feb 4 10:04:59 2012
@@ -78,11 +78,23 @@ do { \
#undef APLOG_MODULE_INDEX
#define APLOG_MODULE_INDEX AP_CORE_MODULE_INDEX

+struct core_output_filter_ctx {
+ apr_bucket_brigade *buffered_bb;
+ apr_bucket_brigade *tmp_flush_bb;
+ apr_pool_t *deferred_write_pool;
+ apr_size_t bytes_written;
+};
+
+struct core_filter_ctx {
+ apr_bucket_brigade *b;
+ apr_bucket_brigade *tmpbb;
+};
+
+
apr_status_t ap_core_input_filter(ap_filter_t *f, apr_bucket_brigade *b,
ap_input_mode_t mode, apr_read_type_e block,
apr_off_t readbytes)
{
- apr_bucket *e;
apr_status_t rv;
core_net_rec *net = f->ctx;
core_ctx_t *ctx = net->in_ctx;
@@ -105,18 +117,13 @@ apr_status_t ap_core_input_filter(ap_fil

if (!ctx)
{
- /*
- * Note that this code is never executed on Windows because the winnt
- * MPM does the setup of net->in_ctx.
- * XXX: This should be fixed.
- */
- ctx = apr_pcalloc(f->c->pool, sizeof(*ctx));
+ net->in_ctx = ctx = apr_palloc(f->c->pool, sizeof(*ctx));
ctx->b = apr_brigade_create(f->c->pool, f->c->bucket_alloc);
- ctx->tmpbb = apr_brigade_create(ctx->b->p, ctx->b->bucket_alloc);
+ ctx->tmpbb = apr_brigade_create(f->c->pool, f->c->bucket_alloc);
/* seed the brigade with the client socket. */
- e = apr_bucket_socket_create(net->client_socket, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->b, e);
- net->in_ctx = ctx;
+ rv = ap_run_insert_network_bucket(f->c, ctx->b, net->client_socket);
+ if (rv != APR_SUCCESS)
+ return rv;
}
else if (APR_BRIGADE_EMPTY(ctx->b)) {
return APR_EOF;

Modified: httpd/httpd/branches/2.4.x/server/mpm/winnt/child.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/server/mpm/winnt/child.c?rev=1240478&r1=1240477&r2=1240478&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/server/mpm/winnt/child.c (original)
+++ httpd/httpd/branches/2.4.x/server/mpm/winnt/child.c Sat Feb 4 10:04:59 2012
@@ -736,6 +736,23 @@ static winnt_conn_ctx_t *winnt_get_conne
return context;
}

+apr_status_t winnt_insert_network_bucket(conn_rec *c,
+ apr_bucket_brigade *bb,
+ apr_socket_t *socket)
+{
+ apr_bucket *e;
+ winnt_conn_ctx_t *context = ap_get_module_config(c->conn_config,
+ &mpm_winnt_module);
+ if (context == NULL || (e = context->overlapped.Pointer) == NULL)
+ return AP_DECLINED;
+
+ /* seed the brigade with AcceptEx read heap bucket */
+ APR_BRIGADE_INSERT_HEAD(bb, e);
+ /* also seed the brigade with the client socket. */
+ e = apr_bucket_socket_create(socket, c->bucket_alloc);
+ APR_BRIGADE_INSERT_TAIL(bb, e);
+ return APR_SUCCESS;
+}

/*
* worker_main()
@@ -810,36 +827,9 @@ static DWORD __stdcall worker_main(void
{
apr_bucket_free(e);
}
- else if (e)
+ else
{
- core_ctx_t *ctx;
- core_net_rec *net;
- ap_filter_t *filt;
-
- filt = c->input_filters;
- while ((strcmp(filt->frec->name, "core_in") != 0) && filt->next)
- filt = filt->next;
- net = filt->ctx;
- ctx = net->in_ctx;
-
- if (net->in_ctx)
- ctx = net->in_ctx;
- else
- {
- ctx = apr_pcalloc(c->pool, sizeof(*ctx));
- ctx->b = apr_brigade_create(c->pool, c->bucket_alloc);
- ctx->tmpbb = apr_brigade_create(c->pool, c->bucket_alloc);
-
- /* seed the brigade with AcceptEx read heap bucket */
- e = context->overlapped.Pointer;
- APR_BRIGADE_INSERT_HEAD(ctx->b, e);
-
- /* also seed the brigade with the client socket. */
- e = apr_bucket_socket_create(net->client_socket,
- c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->b, e);
- net->in_ctx = ctx;
- }
+ ap_set_module_config(c->conn_config, &mpm_winnt_module, context);
}

if (!c->aborted)

Modified: httpd/httpd/branches/2.4.x/server/mpm/winnt/mpm_winnt.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/server/mpm/winnt/mpm_winnt.c?rev=1240478&r1=1240477&r2=1240478&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/server/mpm/winnt/mpm_winnt.c (original)
+++ httpd/httpd/branches/2.4.x/server/mpm/winnt/mpm_winnt.c Sat Feb 4 10:04:59 2012
@@ -1758,6 +1758,8 @@ static void winnt_hooks(apr_pool_t *p)
ap_hook_mpm(winnt_run, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_mpm_query(winnt_query, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_mpm_get_name(winnt_get_name, NULL, NULL, APR_HOOK_MIDDLE);
+ ap_hook_insert_network_bucket(winnt_insert_network_bucket, NULL, NULL,
+ APR_HOOK_MIDDLE);
}

AP_DECLARE_MODULE(mpm_winnt) = {

Modified: httpd/httpd/branches/2.4.x/server/mpm/winnt/mpm_winnt.h
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/server/mpm/winnt/mpm_winnt.h?rev=1240478&r1=1240477&r2=1240478&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/server/mpm/winnt/mpm_winnt.h (original)
+++ httpd/httpd/branches/2.4.x/server/mpm/winnt/mpm_winnt.h Sat Feb 4 10:04:59 2012
@@ -67,6 +67,7 @@ void mpm_nt_eventlog_stderr_flush(void);

/* From mpm_winnt.c: */

+extern module AP_MODULE_DECLARE_DATA mpm_winnt_module;
extern int ap_threads_per_child;

extern DWORD my_pid;
@@ -92,6 +93,9 @@ void hold_console_open_on_error(void);

/* From child.c: */
void child_main(apr_pool_t *pconf);
+apr_status_t winnt_insert_network_bucket(conn_rec *c,
+ apr_bucket_brigade *bb,
+ apr_socket_t *socket);

#endif /* APACHE_MPM_WINNT_H */
/** @} */

Subject User Time
svn commit: r1240478 - in /httpd/httpd/branches/2.4.x: ./ include/ap_mmn.h include/http_core.h include/httpd.h server/core.c server/core_filters.c server/mpm/winnt/child.c server/mpm/winnt/mpm_winnt.c server/mpm/winnt/mpm_winnt.h sf at apache Feb 4, 2012, 2:05 AM

  Index | Next | Previous | View Flat
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.