costin 01/12/06 14:48:50 Modified: jk/native2/include jk_channel.h jk_endpoint.h jk_env.h jk_handler.h jk_logger.h jk_map.h jk_pool.h jk_service.h jk_uriEnv.h jk_uriMap.h jk_worker.h jk_workerEnv.h Log: - Added pools wherever they're needed. Factory now takes a pool - that allows us to get rid of 1/2 of mallocs and be sure the data will be cleaned. - Pass pool to methods that could be called at run time and may need to create temp data ( we don't want to allocate temp data in the object's pool, but in the caller pool or a temp pool - which is short-lived ) - Get rid of all buf[]s. Now all pools are created using the pool hierarchy - i.e. from apr_pools or malloc. Since we recycle, there's no need to play all the stack-allocation tricks. - moved the jk_pool-specific private data to the impl. The common implementation will be used only if APR ( or other server-specific native pools ) are not available. - removed the per/context fileds from the per/uri structure Revision Changes Path 1.2 +1 -4 jakarta-tomcat-connectors/jk/native2/include/jk_channel.h Index: jk_channel.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_channel.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- jk_channel.h 2001/12/01 22:30:57 1.1 +++ jk_channel.h 2001/12/06 22:48:49 1.2 @@ -105,11 +105,8 @@ */ char **supportedProperties; - struct jk_worker *worker; /* XXX Do we need it ? */ - jk_logger_t *logger; + struct jk_worker *worker; jk_map_t *properties; - jk_pool_t *pool; /* XXX Do we need it ? */ - /** Prepare the channel, check the properties. This * will resolve the host and do all the validations. 1.3 +4 -3 jakarta-tomcat-connectors/jk/native2/include/jk_endpoint.h Index: jk_endpoint.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_endpoint.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- jk_endpoint.h 2001/12/05 20:45:13 1.2 +++ jk_endpoint.h 2001/12/06 22:48:49 1.3 @@ -61,7 +61,7 @@ * Author: Gal Shachor <[EMAIL PROTECTED]> * Author: Dan Milstein <[EMAIL PROTECTED]> * Author: Henri Gomez <[EMAIL PROTECTED]> - * Version: $Revision: 1.2 $ + * Version: $Revision: 1.3 $ ***************************************************************************/ #ifndef JK_ENDPOINT_H @@ -127,8 +127,9 @@ struct jk_worker *worker; - jk_pool_t pool; - jk_pool_atom_t buf[BIG_POOL_SIZE]; + /** Each thread has it's own endpoint instance and is recycled. + This pool can be unsynchronized */ + jk_pool_t *pool; int proto; /* PROTOCOL USED AJP13/AJP14 */ 1.2 +5 -3 jakarta-tomcat-connectors/jk/native2/include/jk_env.h Index: jk_env.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_env.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- jk_env.h 2001/12/01 22:30:57 1.1 +++ jk_env.h 2001/12/06 22:48:49 1.2 @@ -80,6 +80,7 @@ * @author Costin Manolache * */ +struct jk_pool; struct jk_env; typedef struct jk_env jk_env_t; @@ -101,6 +102,7 @@ * jk_worker_list.h). */ typedef int (JK_METHOD *jk_env_objectFactory_t)(jk_env_t *env, + jk_pool_t *pool, void **result, const char *type, const char *name); @@ -108,7 +110,7 @@ /** Get a pointer to the jk_env. We could support multiple * env 'instances' in future - for now it's a singleton. */ -jk_env_t* JK_METHOD jk_env_getEnv( char *id ); +jk_env_t* JK_METHOD jk_env_getEnv( char *id, struct jk_pool *pool ); /** @@ -120,7 +122,7 @@ */ struct jk_env { jk_logger_t *logger; - /*jk_pool_t global_pool; */ + jk_pool_t *globalPool; /** Global properties ( similar with System properties in java) */ @@ -136,7 +138,7 @@ call it. This is a very frequent operation. */ void * - (JK_METHOD *getInstance)( jk_env_t *env, const char *type, + (JK_METHOD *getInstance)( jk_env_t *env, jk_pool_t *pool, const char *type, const char *name ); 1.2 +1 -0 jakarta-tomcat-connectors/jk/native2/include/jk_handler.h Index: jk_handler.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_handler.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- jk_handler.h 2001/12/05 20:45:13 1.1 +++ jk_handler.h 2001/12/06 22:48:49 1.2 @@ -97,6 +97,7 @@ typedef struct jk_handler jk_handler_t; struct jk_handler { + struct jk_workerEnv *workerEnv; int (*init)( jk_worker_t *w ); 1.3 +4 -2 jakarta-tomcat-connectors/jk/native2/include/jk_logger.h Index: jk_logger.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_logger.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- jk_logger.h 2001/12/02 02:09:45 1.2 +++ jk_logger.h 2001/12/06 22:48:49 1.3 @@ -58,7 +58,7 @@ /*************************************************************************** * Description: Logger object definitions * * Author: Gal Shachor <[EMAIL PROTECTED]> * - * Version: $Revision: 1.2 $ * + * Version: $Revision: 1.3 $ * ***************************************************************************/ #ifndef JK_LOGGER_H @@ -71,6 +71,8 @@ extern "C" { #endif /* __cplusplus */ +struct jk_map; +struct jk_logger; typedef struct jk_logger jk_logger_t; /* Logger object. @@ -91,7 +93,7 @@ const char *def ); int (JK_METHOD *open)( jk_logger_t *_this, - jk_map_t *properties ); + struct jk_map *properties ); void (JK_METHOD *close)( jk_logger_t *_this ); 1.3 +15 -4 jakarta-tomcat-connectors/jk/native2/include/jk_map.h Index: jk_map.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_map.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- jk_map.h 2001/12/05 20:45:13 1.2 +++ jk_map.h 2001/12/06 22:48:49 1.3 @@ -58,22 +58,25 @@ /*************************************************************************** * Description: Map object header file * * Author: Gal Shachor <[EMAIL PROTECTED]> * - * Version: $Revision: 1.2 $ * + * Version: $Revision: 1.3 $ * ***************************************************************************/ #ifndef JK_MAP_H #define JK_MAP_H +#include "jk_pool.h" +#include "jk_logger.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - +struct jk_logger; +struct jk_pool; struct jk_map; typedef struct jk_map jk_map_t; -int map_alloc(jk_map_t **m); +int map_alloc(jk_map_t **m, struct jk_pool *pool); int map_free(jk_map_t **m); @@ -97,7 +100,13 @@ const char *name, const char *def); +/** Extract a String[] property. It'll split the value on + * ' ', tab, ',', '*'. + * @param pool Pool on which the result will be allocated. Defaults to the map's + * pool + */ char **map_get_string_list(jk_map_t *m, + struct jk_pool *pool, const char *name, unsigned *list_len, const char *def); @@ -152,9 +161,11 @@ const char *pname, unsigned *size); +int map_copy(jk_pool_t *pool, jk_map_t * src, jk_map_t * dst); + /* XXX Very strange hack to deal with special properties */ - int jk_is_some_property(const char *prp_name, const char *suffix); +int jk_is_some_property(const char *prp_name, const char *suffix); #ifdef __cplusplus } 1.4 +18 -28 jakarta-tomcat-connectors/jk/native2/include/jk_pool.h Index: jk_pool.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_pool.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- jk_pool.h 2001/12/05 20:45:13 1.3 +++ jk_pool.h 2001/12/06 22:48:49 1.4 @@ -58,7 +58,7 @@ /*************************************************************************** * Description: Memory Pool object header file * * Author: Gal Shachor <[EMAIL PROTECTED]> * - * Version: $Revision: 1.3 $ * + * Version: $Revision: 1.4 $ * ***************************************************************************/ #ifndef _JK_POOL_H #define _JK_POOL_H @@ -120,18 +120,24 @@ typedef struct jk_pool jk_pool_t; -/** XXX Move it to impl, make it incomplete - */ +/** The pool can grow by (m)allocating more storage, but it'll first use buf. +*/ struct jk_pool { - - void (*open)(jk_pool_t *_this, - jk_pool_atom_t *buf, - unsigned size); + /** Create a child pool. Size is a hint for the + * estimated needs of the child. + */ + jk_pool_t *(*create)(jk_pool_t *_this, + int size ); void (*close)(jk_pool_t *_this); - + + /** Empty the pool using the same space. + * XXX should we rename it to clear() - consistent with apr ? + */ void (*reset)(jk_pool_t *_this); + /* Memory allocation */ + void *(*alloc)(jk_pool_t *_this, size_t size); void *(*realloc)(jk_pool_t *_this, size_t size, @@ -144,31 +150,15 @@ /** Points to the private data. In the case of APR, it's a apr_pool you can use directly */ void *_private; - - /* Private data - XXX move to impl */ - unsigned size; - unsigned pos; - jk_pool_atom_t *buf; - int own_buffer; - unsigned dyn_size; - unsigned dyn_pos; - void **dynamic; }; + +/** Create a pool. Use it for the initial allocation ( in mod_jk ). All other + pools should be created using the virtual method. -/** Create a pool + XXX move this to the factory */ int jk_pool_create( jk_pool_t **newPool, jk_pool_t *parent, int size ); -/** Open a pool using allocated space. The pool can grow by - (m)allocating more storage, but it'll first use buf. - This is used in jk with stack-allocated pools. -*/ -void jk_pool_open(jk_pool_t *p, jk_pool_atom_t *buf, unsigned size); - - -void jk_open_pool(jk_pool_t *p, - jk_pool_atom_t *buf, - unsigned size); #ifdef __cplusplus } 1.3 +3 -2 jakarta-tomcat-connectors/jk/native2/include/jk_service.h Index: jk_service.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_service.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- jk_service.h 2001/12/04 18:33:05 1.2 +++ jk_service.h 2001/12/06 22:48:49 1.3 @@ -63,7 +63,7 @@ * Author: Gal Shachor <[EMAIL PROTECTED]> * * Author: Dan Milstein <[EMAIL PROTECTED]> * * Author: Henri Gomez <[EMAIL PROTECTED]> * - * Version: $Revision: 1.2 $ * + * Version: $Revision: 1.3 $ * ***************************************************************************/ #ifndef JK_SERVICE_H @@ -135,7 +135,8 @@ * allocated within this pool, which can then be reclaimed at the end * of the request handling cycle. * - * Alive as long as the request is alive. + * Alive as long as the request is alive. + * You can use endpoint pool for communication - it is recycled. */ jk_pool_t *pool; 1.4 +17 -55 jakarta-tomcat-connectors/jk/native2/include/jk_uriEnv.h Index: jk_uriEnv.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_uriEnv.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- jk_uriEnv.h 2001/12/05 20:45:13 1.3 +++ jk_uriEnv.h 2001/12/06 22:48:49 1.4 @@ -82,7 +82,12 @@ struct jk_env; struct jk_uri_worker_map; struct jk_map; +struct jk_webapp; +struct jk_uriEnv; +typedef struct jk_uriEnv jk_uriEnv_t; + + #define MATCH_TYPE_EXACT (0) #define MATCH_TYPE_CONTEXT (1) #define MATCH_TYPE_SUFFIX (2) @@ -92,35 +97,18 @@ struct jk_uriEnv { struct jk_workerEnv *workerEnv; + struct jk_webapp *webapp; + /* Generic name/value properties. Some workers may use it. */ struct jk_map *properties; - - /** Worker associated with this location. - Inherited by virtual host, context ( i.e. you can override - it if you want, the default will be the 'global' default worker, - or the virtual host worker ). - */ - struct jk_worker *worker; - /** worker name - allow this to be set before the worker is defined. - * XXX do we need it ? - */ - char *workerName; - - /* Virtual server handled - "*" is all virtual. - */ - char *virtual; - char *uri; - - /** Web application. No need to compute it again in tomcat. - * The 'id' is the index in the context table ( todo ), it - * reduce the ammount of trafic ( and string creation on java ) + /* Original uri ( unparsed ) */ - char *context; - int contextId; + char *uri; - char *docbase; + /** XXX todo. + */ int status; /** Servlet. No need to compute it again in tomcat @@ -128,46 +116,20 @@ char *servlet; int servletId; - /* ---------- For our internal mapper use ---------- */ + /* Extracted suffix, for extension-based mathces */ char *suffix; - int ctxt_len; - int match_type; - - /** You can fine-tune the logging level per location - */ - int log_level; - - /** Different apps can have different loggers. - */ - jk_logger_t *l; - - /* SSL Support - you can fine tune this per application. - * ( most likely you only do it per virtual host or globally ) - * XXX shouldn't SSL be enabled by default ??? - */ - int ssl_enable; - char *https_indicator; - char *certs_indicator; - char *cipher_indicator; - char *session_indicator; - char *key_size_indicator; - - /* Jk Options. Bitflag. - */ - int options; + char *prefix; + + int prefix_len; + int suffix_len; - /* Environment variables support - */ - int envvars_in_use; - jk_map_t * envvars; + int match_type; /* -------------------- Methods -------------------- */ /* get/setProperty */ }; - -typedef struct jk_uriEnv jk_uriEnv_t; #ifdef __cplusplus 1.5 +4 -7 jakarta-tomcat-connectors/jk/native2/include/jk_uriMap.h Index: jk_uriMap.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_uriMap.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- jk_uriMap.h 2001/12/05 20:45:13 1.4 +++ jk_uriMap.h 2001/12/06 22:48:49 1.5 @@ -138,13 +138,10 @@ /* -------------------- @deprecated -------------------- */ /* used by the mapper, temp storage ( ??? )*/ - /* Memory Pool */ - jk_pool_t p; - jk_pool_atom_t buf[SMALL_POOL_SIZE]; - - /* Temp Pool */ - jk_pool_t tp; - jk_pool_atom_t tbuf[SMALL_POOL_SIZE]; + /* pool for mappings. Mappings will change at runtime, we can't + * recycle the main pool. + */ + jk_pool_t *pool; }; #ifdef __cplusplus 1.4 +5 -1 jakarta-tomcat-connectors/jk/native2/include/jk_worker.h Index: jk_worker.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_worker.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- jk_worker.h 2001/12/05 20:45:13 1.3 +++ jk_worker.h 2001/12/06 22:48:49 1.4 @@ -58,7 +58,7 @@ /*************************************************************************** * Description: Workers controller header file * * Author: Gal Shachor <[EMAIL PROTECTED]> * - * Version: $Revision: 1.3 $ * + * Version: $Revision: 1.4 $ * ***************************************************************************/ #ifndef JK_WORKER_H @@ -170,6 +170,10 @@ struct jk_workerEnv *workerEnv; char *name; + /** Pool for worker specific informations. + In future we may start/stop/reload workers at runtime, but that's + far away + */ jk_pool_t *pool; /* 1.4 +14 -1 jakarta-tomcat-connectors/jk/native2/include/jk_workerEnv.h Index: jk_workerEnv.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_workerEnv.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- jk_workerEnv.h 2001/12/05 20:45:13 1.3 +++ jk_workerEnv.h 2001/12/06 22:48:49 1.4 @@ -58,7 +58,7 @@ /*************************************************************************** * Description: Workers controller header file * * Author: Gal Shachor <[EMAIL PROTECTED]> * - * Version: $Revision: 1.3 $ * + * Version: $Revision: 1.4 $ * ***************************************************************************/ #ifndef JK_WORKERENV_H @@ -69,6 +69,7 @@ #include "jk_worker.h" #include "jk_map.h" #include "jk_uriMap.h" +#include "jk_webapp.h" #ifdef __cplusplus extern "C" { @@ -78,6 +79,7 @@ struct jk_endpoint; struct jk_env; struct jk_uriMap; +struct jk_webapp; struct jk_map; /* @@ -95,6 +97,10 @@ */ /* struct jk_map *uri_to_context; */ + /* Use this pool for all global settings + */ + struct jk_pool *pool; + /* Workers hashtable. You can also access workers by id */ struct jk_map *worker_map; @@ -146,6 +152,9 @@ struct jk_uriMap *uriMap; + struct jk_webapp *rootWebapp; + struct jk_map *webapps; + /** If 'global' server mappings will be visible in virtual hosts as well. XXX Not sure this is needed */ @@ -195,6 +204,10 @@ const char *name, struct jk_map *init_data); + struct jk_webapp *(*createWebapp)(struct jk_workerEnv *_this, + const char *vhost, + const char *name, + struct jk_map *init_data); /** * Init the workers, prepare the worker environment.
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>