Does this really help out? Certainly years ago bitfields made sense but nowadays even K&R say to avoid them.
Plus, when we have bitfields "randomly" located in the struct, padding becomes an issue. Plus, iirc, they are slow. I'd be +1 for changing them to chars if we want to save space. On Oct 23, 2010, at 3:34 PM, [email protected] wrote: > Author: minfrin > Date: Sat Oct 23 19:34:16 2010 > New Revision: 1026668 > > URL: http://svn.apache.org/viewvc?rev=1026668&view=rev > Log: > Optimise more of the flags within proxy structures. > > Modified: > httpd/httpd/trunk/modules/proxy/mod_proxy.h > > Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.h > URL: > http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy.h?rev=1026668&r1=1026667&r2=1026668&view=diff > ============================================================================== > --- httpd/httpd/trunk/modules/proxy/mod_proxy.h (original) > +++ httpd/httpd/trunk/modules/proxy/mod_proxy.h Sat Oct 23 19:34:16 2010 > @@ -214,26 +214,26 @@ typedef struct { > > typedef struct { > conn_rec *connection; > - request_rec *r; /* Request record of the frontend request > - * which the backend currently answers. */ > - proxy_worker *worker; /* Connection pool this connection belongs to */ > - apr_pool_t *pool; /* Subpool for hostname and addr data */ > + request_rec *r; /* Request record of the frontend request > + * which the backend currently answers. */ > + proxy_worker *worker; /* Connection pool this connection belongs to > */ > + apr_pool_t *pool; /* Subpool for hostname and addr data */ > const char *hostname; > - apr_sockaddr_t *addr; /* Preparsed remote address info */ > - apr_pool_t *scpool; /* Subpool used for socket and connection data */ > - apr_socket_t *sock; /* Connection socket */ > - void *data; /* per scheme connection data */ > - void *forward; /* opaque forward proxy data */ > - apr_uint32_t flags; /* Connection flags */ > + apr_sockaddr_t *addr; /* Preparsed remote address info */ > + apr_pool_t *scpool; /* Subpool used for socket and connection > data */ > + apr_socket_t *sock; /* Connection socket */ > + void *data; /* per scheme connection data */ > + void *forward; /* opaque forward proxy data */ > + apr_uint32_t flags; /* Connection flags */ > apr_port_t port; > - char is_ssl; > - char close; /* Close 'this' connection */ > - char need_flush;/* Flag to decide whether we need to flush the > - * filter chain or not */ > + int is_ssl:1; > + int close:1; /* Close 'this' connection */ > + int need_flush:1; /* Flag to decide whether we need to flush the > + * filter chain or not */ > #if APR_HAS_THREADS > - char inreslist; /* connection in apr_reslist? */ > + int inreslist:1; /* connection in apr_reslist? */ > #endif > - int cleaned:1; /* connection cleaned? */ > + int cleaned:1; /* connection cleaned? */ > } proxy_conn_rec; > > typedef struct { > @@ -325,7 +325,7 @@ struct proxy_worker { > apr_port_t port; > char keepalive; > char disablereuse; > - int is_address_reusable; > + int is_address_reusable:1; > proxy_conn_pool *cp; /* Connection pool to use */ > proxy_worker_stat *s; /* Shared data */ > void *opaque; /* per scheme worker data */ > >
