One last warning concerning modules/http/http_protocol.c. No patch
as I'm not sure which enum is right.
"http_protocol.c", line 502: warning: enum type mismatch: arg #4
"http_protocol.c", line 593: warning: enum type mismatch: arg #4
"http_protocol.c", line 642: warning: enum type mismatch: arg #4
Those lines concern the mode variable into the bucket read functions.
apr_util has BLOCK_READ and NONBLOCK_READ. The filters have similar
(but not exactly the same) names and honor a third value PEEK. IIRC,
most compilers start enums at 0 - so I doubt the mismatch is hurting
us as long as we don't pass PEEK to the buckets. It does look like
the filter code (ap_http_filter) is using the PEEK enum for
keepalive/pipelining detection (not being passed to the buckets
though). Since we are using the PEEK value, I don't think we can
just toss the ap_input_mode_t enum.
Here are the relevant enums:
typedef enum {
APR_BLOCK_READ,
APR_NONBLOCK_READ
} apr_read_type_e;
typedef enum {
/** The filter shouldn't return until data is received or EOF is hit
* or an error occurs. */
AP_MODE_BLOCKING,
/** The filter should process any available data/status as normal,
* but will not wait for additional data. */
AP_MODE_NONBLOCKING,
/** The filter should return ::APR_SUCCESS if data is available or
* ::APR_EOF otherwise. The filter must not return any buckets of
* data. Data returned on a subsequent call, when mode is
* ::AP_MODE_BLOCKING or ::AP_MODE_NONBLOCKING. */
AP_MODE_PEEK
} ap_input_mode_t;
I'll let someone who is more familiar with the bucket code and who has
httpd commit access figure this out if they want to. =) -- justin