You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Cliff Woolley <cl...@yahoo.com> on 2001/03/03 00:11:00 UTC
Re: cvs commit: httpd-2.0/modules/filters mod_include.c
On 2 Mar 2001 trawick@apache.org wrote:
> trawick 01/03/02 13:36:23
>
> Modified: modules/experimental config.m4 mod_case_filter.c
> mod_charset_lite.c mod_disk_cache.c
> mod_ext_filter.c
> modules/filters mod_include.c
> Log:
> Use the proper enum for the block/non-block parameter to apr_bucket_read().
> A couple of these changed in meaning (e.g., 1->APR_BLOCK_READ).
>
There are some related (potential) issues in http_protocol.c that I
noticed a while back but had forgotten about. Basically, some places in
http_protocol.c call apr_bucket_read() and pass to it their own 'mode'
parameter. 'mode' in the filter sense is of type enum ap_input_mode_t, as
opposed to ap_read_type_e that apr_bucket_read() expects. It works (for
now), because the two happen to line up in both values and meaning:
typedef enum {
APR_BLOCK_READ,
APR_NONBLOCK_READ
} apr_read_type_e;
typedef enum {
AP_MODE_BLOCKING,
AP_MODE_NONBLOCKING,
AP_MODE_PEEK
} ap_input_mode_t;
If one of them ever changed, though, the other one would have to change
too, or we'd silently introduce subtle bugs. My first reaction would
have been to nix ap_input_mode_t and just use apr_read_type_e... but,
obviously, we can't do that because of AP_MODE_PEEK which has no buckets
equivalent.
We need to do one of three things:
(1) Change the callers in http_protocol.c to do something like this:
apr_bucket_read(... , (mode == AP_MODE_BLOCKING)
? APR_BLOCK_READ
: APR_NONBLOCK_READ);
[ewww, ugly]
(2) Just document that the two have a dependency on one another's values
(3) Give the buckets a PEEK concept and nix ap_input_mode_t.
I really hate to do #1 because it's ugly, but at least it would better
survive changes to one of the enums without corresponding changes to the
other. I could live with #2, but #3 is interesting and might have
potential uses for other purposes. Thoughts on that?
--Cliff