costin      01/12/01 17:06:52

  Modified:    jk/native2/server/apache2 mod_jk.c
  Log:
  Update mod_jk.
  
  Apache now starts without any core dump ( :-) ), I haven't tried to use it
  yet, probably tommorow.
  
  Revision  Changes    Path
  1.2       +117 -116  jakarta-tomcat-connectors/jk/native2/server/apache2/mod_jk.c
  
  Index: mod_jk.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/apache2/mod_jk.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- mod_jk.c  2001/12/01 22:41:40     1.1
  +++ mod_jk.c  2001/12/02 01:06:52     1.2
  @@ -60,7 +60,7 @@
    * Description: Apache 2 plugin for Jakarta/Tomcat                         *
    * Author:      Gal Shachor <[EMAIL PROTECTED]>                           *
    *                 Henri Gomez <[EMAIL PROTECTED]>                               *
  - * Version:     $Revision: 1.1 $                                           *
  + * Version:     $Revision: 1.2 $                                           *
    ***************************************************************************/
   
   /*
  @@ -103,7 +103,7 @@
   #define JK_MAGIC_TYPE       ("application/x-jakarta-servlet")
   #define NULL_FOR_EMPTY(x)   ((x && !strlen(x)) ? NULL : x) 
   
  -AP_DECLARE_DATA module jk_module;
  +AP_MODULE_DECLARE_DATA module jk_module;
   
   struct apache_private_data {
       jk_pool_t p;
  @@ -248,6 +248,8 @@
                                 const void *b,
                                 unsigned l)
   {
  +    jk_logger_t *l=s->workerEnv->l;
  +    
       if(s && s->ws_private && b) {
           apache_private_data_t *p = s->ws_private;
   
  @@ -259,7 +261,7 @@
               char *bb=(char *)b;
               
               if(!p->response_started) {
  -                jk_log(s->workerEnv->l, JK_LOG_DEBUG, 
  +                l->jkLog(l, JK_LOG_DEBUG, 
                          "Write without start, starting with defaults\n");
                   if(!s->start_response(s, 200, NULL, NULL, NULL, 0)) {
                       return JK_FALSE;
  @@ -270,7 +272,7 @@
               while( ll > 0 ) {
                   unsigned long toSend=(ll>CHUNK_SIZE) ? CHUNK_SIZE : ll;
                   r = ap_rwrite((const char *)bb, toSend, p->r );
  -                jk_log(s->workerEnv->l, JK_LOG_DEBUG, 
  +                l->jkLog(l, JK_LOG_DEBUG, 
                          "writing %ld (%ld) out of %ld \n",toSend, r, ll );
                   ll-=CHUNK_SIZE;
                   bb+=CHUNK_SIZE;
  @@ -346,6 +348,7 @@
                              jk_workerEnv_t *workerEnv)
   {
       request_rec *r      = private_data->r;
  +    jk_logger_t *l=s->workerEnv->l;
   
       apr_port_t port;
   
  @@ -367,8 +370,8 @@
       s->remote_host  = NULL_FOR_EMPTY(s->remote_host);
       s->remote_addr  = NULL_FOR_EMPTY(r->connection->remote_ip);
   
  -    if( s->workerEnv->l->level <= JK_LOG_DEBUG_LEVEL ) {
  -        jk_log(s->workerEnv->l, JK_LOG_DEBUG, 
  +    if( l->level <= JK_LOG_DEBUG_LEVEL ) {
  +        l->jkLog(l, JK_LOG_DEBUG, 
                  "agsp=%u agsn=%s hostn=%s shostn=%s cbsport=%d sport=%d \n",
                  ap_get_server_port( r ),
                  ap_get_server_name( r ),
  @@ -635,19 +638,39 @@
   {
       server_rec *s = cmd->server;
       struct stat statbuf;
  +    jk_logger_t *l;
   
       jk_workerEnv_t *workerEnv =
           (jk_workerEnv_t *)ap_get_module_config(s->module_config, &jk_module);
  -
  +    l=workerEnv->l;
  +    
       /* we need an absolut path (ap_server_root_relative does the ap_pstrdup) */
       workerEnv->worker_file = ap_server_root_relative(cmd->pool,worker_file);
  - 
  +
       if (workerEnv->worker_file == NULL)
           return "JkWorkersFile file_name invalid";
   
       if (stat(workerEnv->worker_file, &statbuf) == -1)
           return "Can't find the workers file specified";
   
  +    /** Read worker files
  +     */
  +    l->jkLog(l, JK_LOG_DEBUG, "Reading map %s %d\n",
  +           workerEnv->worker_file, map_size( workerEnv->init_data ) );
  +    
  +    if( workerEnv->worker_file != NULL ) {
  +        int err=map_read_properties(workerEnv->init_data,
  +                                    workerEnv->worker_file);
  +        if( err==JK_TRUE ) {
  +            l->jkLog(l, JK_LOG_DEBUG, 
  +                   "Read map %s %d\n", workerEnv->worker_file,
  +                   map_size( workerEnv->init_data ) );
  +        } else {
  +            l->jkLog(l, JK_LOG_ERROR, "Error reading map %s %d\n",
  +                   workerEnv->worker_file, map_size( workerEnv->init_data ) );
  +        }
  +    }
  +
       return NULL;
   }
   
  @@ -667,7 +690,7 @@
       jk_workerEnv_t *workerEnv =
           (jk_workerEnv_t *)ap_get_module_config(s->module_config, &jk_module);
       
  -    jk_map_t *m=workerEnv->worker_properties;
  +    jk_map_t *m=workerEnv->init_data;
       
       value = map_replace_properties(value, m );
   
  @@ -714,13 +737,16 @@
       server_rec *s = cmd->server;
       jk_workerEnv_t *workerEnv =
           (jk_workerEnv_t *)ap_get_module_config(s->module_config, &jk_module);
  +    char *logFileA;
   
       /* we need an absolut path */
  -    workerEnv->log_file = ap_server_root_relative(cmd->pool,log_file);
  - 
  -    if (workerEnv->log_file == NULL)
  +    logFileA = ap_server_root_relative(cmd->pool,log_file);
  +
  +    if (logFileA == NULL)
           return "JkLogFile file_name invalid";
   
  +    map_put( workerEnv->init_data, "logger.file.name", logFileA, NULL);
  + 
       return NULL;
   }
   
  @@ -737,9 +763,8 @@
       server_rec *s = cmd->server;
       jk_workerEnv_t *workerEnv =
           (jk_workerEnv_t *)ap_get_module_config(s->module_config, &jk_module);
  -
  -    workerEnv->log_level = jk_parse_log_level(log_level);
   
  +    map_put( workerEnv->init_data, "logger.file.level", log_level, NULL);
       return NULL;
   }
   
  @@ -748,12 +773,15 @@
    *
    * JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    */
  -
   static const char * jk_set_log_fmt(cmd_parms *cmd,
                         void *dummy,
                         const char * log_format)
   {
  -    jk_set_log_format(log_format);
  +    server_rec *s = cmd->server;
  +    jk_workerEnv_t *workerEnv =
  +        (jk_workerEnv_t *)ap_get_module_config(s->module_config, &jk_module);
  +
  +    map_put( workerEnv->init_data, "logger.file.timeFormat", log_format, NULL);
       return NULL;
   }
   
  @@ -1103,7 +1131,7 @@
   static int jk_handler(request_rec *r)
   {   
       const char       *worker_name;
  -    jk_logger_t      *xl;
  +    jk_logger_t      *l;
       jk_workerEnv_t *workerEnv;
       int              rc;
       jk_worker_t *worker;
  @@ -1114,7 +1142,7 @@
       workerEnv = (jk_workerEnv_t *)ap_get_module_config(r->server->module_config, 
                                                        &jk_module);
       worker_name = apr_table_get(r->notes, JK_WORKER_ID);
  -    xl = workerEnv->l;
  +    l = workerEnv->l;
   
       /* Set up r->read_chunked flags for chunked encoding, if present */
       if(rc = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) {
  @@ -1133,7 +1161,7 @@
                 explicitely give control to us. */
             worker =  workerEnv->defaultWorker;
             worker_name=worker->name;
  -          jk_log(xl, JK_LOG_DEBUG, 
  +          l->jkLog(l, JK_LOG_DEBUG, 
                    "Default worker for %s %s\n", r->uri, worker->name); 
         } else {
             jk_uriMap_t *uriMap=workerEnv->uriMap;
  @@ -1148,14 +1176,14 @@
                 worker = uriEnv->worker;
                 worker_name= worker->name;
             }
  -          jk_log(xl, JK_LOG_DEBUG, 
  +          l->jkLog(l, JK_LOG_DEBUG, 
                    "Manual configuration for %s %s\n",
                    r->uri, workerEnv->defaultWorker->name); 
         }
       }
   
       if (1) {
  -        jk_log(xl, JK_LOG_DEBUG, "Into handler r->proxyreq=%d "
  +        l->jkLog(l, JK_LOG_DEBUG, "Into handler r->proxyreq=%d "
                  "r->handler=%s r->notes=%d worker=%s\n", 
                  r->proxyreq, r->handler, r->notes, worker_name); 
       }
  @@ -1166,9 +1194,10 @@
       }
   
       if(worker_name!=NULL || worker!=NULL ) {
  -        if( worker==NULL )
  +        if( worker==NULL ) {
               worker = workerEnv->getWorkerForName(workerEnv,
  -                                                       worker_name );
  +                                                 worker_name );
  +        }
   
           if(worker) {
               int rc = JK_FALSE;
  @@ -1176,12 +1205,12 @@
               jk_ws_service_t s;
               jk_pool_atom_t buf[SMALL_POOL_SIZE];
               jk_open_pool(&private_data.p, buf, sizeof(buf));
  -
  +            
               s.workerEnv=workerEnv;
               private_data.response_started = JK_FALSE;
               private_data.read_body_started = JK_FALSE;
               private_data.r = r;
  -
  +            
               jk_init_ws_service(&s);
   
               s.ws_private = &private_data;
  @@ -1189,56 +1218,55 @@
               
               if(init_ws_service(&private_data, &s, workerEnv)) {
                   jk_endpoint_t *end = NULL;
  -
  -        /* Use per/thread pool ( or "context" ) to reuse the 
  -           endpoint. It's a bit faster, but I don't know 
  -           how to deal with load balancing - but it's usefull for JNI
  -        */
  -
  -#ifdef REUSE_WORKER
  -        apr_pool_t *rpool=r->pool;
  -        apr_pool_t *parent_pool= apr_pool_get_parent( rpool );
  -        apr_pool_t *tpool= apr_pool_get_parent( parent_pool );
  -        
  -        apr_pool_userdata_get( (void *)&end, "jk_thread_endpoint", tpool );
  -        jk_log(xl, JK_LOG_DEBUG, "Using per-thread worker %lx\n ", end );
  -        if(end==NULL ) {
  -            worker->get_endpoint(worker, &end, xl);
  -            apr_pool_userdata_set( end , "jk_thread_endpoint", 
  -                                   &jk_cleanup_endpoint,  tpool );
  -        }
  -#else
  -        worker->get_endpoint(worker, &end, xl);
  -#endif
  -        {   
  -            int is_recoverable_error = JK_FALSE;
  -            rc = end->service(end, &s, xl, &is_recoverable_error);
   
  -            if (s.content_read < s.content_length ||
  -                (s.is_chunked && ! s.no_more_chunks)) {
  -
  -                /*
  -                * If the servlet engine didn't consume all of the
  -                * request data, consume and discard all further
  -                * characters left to read from client
  +                /* Use per/thread pool ( or "context" ) to reuse the 
  +                   endpoint. It's a bit faster, but I don't know 
  +                   how to deal with load balancing - but it's usefull for JNI
                   */
  -                    char *buff = apr_palloc(r->pool, 2048);
  -                    if (buff != NULL) {
  -                    int rd;
  -                    while ((rd = ap_get_client_block(r, buff, 2048)) > 0) {
  -                        s.content_read += rd;
  +                
  +                if( workerEnv->perThreadWorker ) {
  +                    apr_pool_t *rpool=r->pool;
  +                    apr_pool_t *parent_pool= apr_pool_get_parent( rpool );
  +                    apr_pool_t *tpool= apr_pool_get_parent( parent_pool );
  +        
  +                    apr_pool_userdata_get( (void *)&end, "jk_thread_endpoint", 
tpool );
  +                    l->jkLog(l, JK_LOG_DEBUG, "Using per-thread worker %lx\n ", end 
);
  +                    if(end==NULL ) {
  +                        worker->get_endpoint(worker, &end, l);
  +                        apr_pool_userdata_set( end , "jk_thread_endpoint", 
  +                                               &jk_cleanup_endpoint,  tpool );
                       }
  +                } else {
  +                    worker->get_endpoint(worker, &end, l);
                   }
  -            }
  -                                                                            
  -#ifndef REUSE_WORKER            
  -            end->done(&end, xl); 
  -#endif
  +                {   
  +                    int is_recoverable_error = JK_FALSE;
  +                    rc = end->service(end, &s, l, &is_recoverable_error);
  +                    
  +                    if (s.content_read < s.content_length ||
  +                        (s.is_chunked && ! s.no_more_chunks)) {
  +                        
  +                        /*
  +                         * If the servlet engine didn't consume all of the
  +                         * request data, consume and discard all further
  +                         * characters left to read from client
  +                         */
  +                        char *buff = apr_palloc(r->pool, 2048);
  +                        if (buff != NULL) {
  +                            int rd;
  +                            while ((rd = ap_get_client_block(r, buff, 2048)) > 0) {
  +                                s.content_read += rd;
  +                            }
  +                        }
  +                    }
                   }
  +                if( ! workerEnv->perThreadWorker ) {
  +                    end->done(&end, l); 
  +                }
               }
   
               jk_close_pool(&private_data.p);
  -
  +            
               if(rc) {
                   return OK;    /* NOT r->status, even if it has changed. */
               }
  @@ -1259,11 +1287,15 @@
       jk_env_t *env;
       jk_env_objectFactory_t fac;
       jk_workerEnv_t *workerEnv;
  +    jk_logger_t *l;
           
       env=jk_env_getEnv( NULL );
  -    printf("XXX Created env \n");
  -    jk_log(env->logger, JK_LOG_DEBUG, 
  -           "Created env\n" );
  +
  +    l = env->getInstance( env, "logger", "file");
  +    
  +    env->logger=l;
  +    
  +    l->jkLog(l, JK_LOG_DEBUG, "Created env and logger\n" );
   
       workerEnv= env->getInstance( env, "workerEnv", "default");
   
  @@ -1378,50 +1410,14 @@
   */
   static void init_jk( apr_pool_t *pconf, jk_workerEnv_t *workerEnv, server_rec *s ) {
       int err;
  -    /* init_map contain the current options specified by apache directives
  -     */
  -    jk_map_t *init_map = workerEnv->worker_properties;
  -
  -    /** Read worker files
  -     */
  -    jk_log(workerEnv->l, JK_LOG_DEBUG, 
  -           "Reading map %s %d\n",
  -           workerEnv->worker_file, map_size( init_map ) );
  +    jk_logger_t *l=workerEnv->l;
       
  -    if( workerEnv->worker_file != NULL ) {
  -        int err=map_read_properties(init_map, workerEnv->worker_file);
  -        if( err==JK_TRUE ) {
  -            jk_log(workerEnv->l, JK_LOG_DEBUG, 
  -                   "Read map %s %d\n", workerEnv->worker_file,
  -                   map_size( init_map ) );
  -        } else {
  -            jk_log(workerEnv->l, JK_LOG_ERROR, 
  -                   "Error reading map %s %d\n",
  -                   workerEnv->worker_file, map_size( init_map ) );
  -        }
  -    }
  +    l->open( l, workerEnv->init_data );
   
  -    if( map_size( init_map ) == 0 ) {
  -        jk_error_exit(APLOG_MARK, APLOG_EMERG, s, 
  -                      pconf, "No worker file and no worker options in httpd.conf \n"
  -                      "use JkWorkerFile or JkWorker to set workers");
  -        return;
  +    if( err != JK_TRUE ) {
  +        l->jkLog( l, JK_LOG_ERROR,
  +                  "Can't open logger %s \n", workerEnv->log_file );
       }
  -        
  -
  -    /** Switch to the configured file logger ( if any ) */
  -    if(workerEnv->log_file && workerEnv->log_level >= 0) {
  -        jk_logger_t *origL=workerEnv->l;
  -        
  -        int err=jk_open_file_logger(&(workerEnv->l), 
  -                                    workerEnv->log_file, workerEnv->log_level);
  -        if( err != JK_TRUE ) {
  -            jk_log( origL, JK_LOG_ERROR,
  -                    "Can't open logger %s \n", workerEnv->log_file );
  -            workerEnv->l = origL;
  -        }
  -
  -    } 
   
       /* local initialization */
       workerEnv->virtual       = "*";     /* for now */
  @@ -1432,7 +1428,7 @@
   
       err=workerEnv->uriMap->init(workerEnv->uriMap,
                                   workerEnv,
  -                                init_map );
  +                                workerEnv->init_data );
       
       ap_add_version_component(pconf, JK_EXPOSED_VERSION);
       return;
  @@ -1459,11 +1455,16 @@
    *    tomcat and what worker to use. 
    */
   static int jk_translate(request_rec *r)
  -{    
  +{
  +    jk_logger_t *l;
  +    
       if(!r->proxyreq) {        
           jk_workerEnv_t *workerEnv =
               (jk_workerEnv_t *)ap_get_module_config(r->server->module_config,
                                                        &jk_module);
  +
  +        l=workerEnv->l;
  +        
           if(workerEnv) {
               char *workerName;
               jk_uriEnv_t *uriEnv;
  @@ -1473,13 +1474,13 @@
                   /* Somebody already set the handler, probably manual config
                    * or "native" configuration, no need for extra overhead
                    */
  -                jk_log(workerEnv->l, JK_LOG_DEBUG, 
  +                l->jkLog(l, JK_LOG_DEBUG, 
                          "Manually mapped, no need to call uri_to_worker\n");
                   return DECLINED;
               }
               uriEnv = workerEnv->uriMap->mapUri(workerEnv->uriMap,
  -                                                     NULL,
  -                                                     r->uri );
  +                                               NULL,
  +                                               r->uri );
   
               if(uriEnv==NULL ) {
                   return DECLINED;
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to