dougm       01/03/16 09:23:31

  Modified:    src/modules/perl modperl_callback.c modperl_callback.h
                        modperl_handler.c modperl_handler.h modperl_types.h
  Log:
  prototype the 3 pools in run_handlers() rather that use va_args,
  so we can have a pool sooner rather than later
  
  pass lookup_hanalders() an lvalue arg and pool so it can create the
  handler array if needed
  
  add handler vectors to per-request config (will be used for set/push handlers)
  
  Revision  Changes    Path
  1.35      +38 -51    modperl-2.0/src/modules/perl/modperl_callback.c
  
  Index: modperl_callback.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_callback.c,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- modperl_callback.c        2001/03/16 06:57:42     1.34
  +++ modperl_callback.c        2001/03/16 17:23:23     1.35
  @@ -91,8 +91,11 @@
       return status;
   }
   
  -int modperl_callback_run_handlers(int idx, request_rec *r, conn_rec *c,
  -                                  server_rec *s, int type, ...)
  +int modperl_callback_run_handlers(int idx, int type,
  +                                  request_rec *r, conn_rec *c, server_rec *s,
  +                                  apr_pool_t *pconf,
  +                                  apr_pool_t *plog,
  +                                  apr_pool_t *ptemp)
   {
   #ifdef USE_ITHREADS
       pTHX;
  @@ -105,7 +108,6 @@
       MpAV *av, **avp;
       int i, status = OK;
       const char *desc = NULL;
  -    va_list args;
       AV *av_args = Nullav;
   
       if (!MpSrvENABLED(scfg)) {
  @@ -114,8 +116,15 @@
           return DECLINED;
       }
   
  -    avp = modperl_handler_lookup_handlers(dcfg, scfg, NULL,
  -                                          type, idx, &desc);
  +    if (r || c) {
  +        p = c ? c->pool : r->pool;
  +    }
  +    else {
  +        p = pconf;
  +    }
  +
  +    avp = modperl_handler_lookup_handlers(dcfg, scfg, NULL, p,
  +                                          type, idx, FALSE, &desc);
   
       if (!(avp && (av = *avp))) {
           MP_TRACE_h(MP_FUNC, "no %s handlers configured (%s)\n",
  @@ -128,7 +137,6 @@
           c = r->connection;
       }
       if (r || c) {
  -        p = c ? c->pool : r->pool;
           interp = modperl_interp_select(r, c, s);
           aTHX = interp->perl;
       }
  @@ -150,39 +158,17 @@
                                     "Apache::Connection", c, NULL);
           break;
         case MP_HANDLER_TYPE_FILES:
  -          {
  -              apr_pool_t *pconf, *plog, *ptemp;
  -
  -              va_start(args, type);
  -              pconf = va_arg(args, apr_pool_t *);
  -              plog  = va_arg(args, apr_pool_t *);
  -              ptemp = va_arg(args, apr_pool_t *);
  -              va_end(args);
  -
  -              modperl_handler_make_args(aTHX_ &av_args,
  -                                        "Apache::Pool", pconf,
  -                                        "Apache::Pool", plog,
  -                                        "Apache::Pool", ptemp,
  -                                        "Apache::Server", s, NULL);
  -          }
  -          break;
  +        modperl_handler_make_args(aTHX_ &av_args,
  +                                  "Apache::Pool", pconf,
  +                                  "Apache::Pool", plog,
  +                                  "Apache::Pool", ptemp,
  +                                  "Apache::Server", s, NULL);
  +        break;
         case MP_HANDLER_TYPE_PROCESS:
  -          {
  -              apr_pool_t *pconf;
  -
  -              va_start(args, type);
  -              pconf = va_arg(args, apr_pool_t *);
  -              va_end(args);
  -
  -              if (!p) {
  -                  p = pconf;
  -              }
  -
  -              modperl_handler_make_args(aTHX_ &av_args,
  -                                        "Apache::Pool", pconf,
  -                                        "Apache::Server", s, NULL);
  -          }
  -          break;
  +        modperl_handler_make_args(aTHX_ &av_args,
  +                                  "Apache::Pool", pconf,
  +                                  "Apache::Server", s, NULL);
  +        break;
       };
   
       MP_TRACE_h(MP_FUNC, "running %d %s handlers\n",
  @@ -212,36 +198,37 @@
   
   int modperl_callback_per_dir(int idx, request_rec *r)
   {
  -    return modperl_callback_run_handlers(idx, r, NULL,
  -                                         r->server,
  -                                         MP_HANDLER_TYPE_PER_DIR);
  +    return modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_PER_DIR,
  +                                         r, NULL, r->server,
  +                                         NULL, NULL, NULL);
   }
   
   int modperl_callback_per_srv(int idx, request_rec *r)
   {
  -    return modperl_callback_run_handlers(idx, r, NULL,
  -                                         r->server,
  -                                         MP_HANDLER_TYPE_PER_SRV);
  +    return modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_PER_SRV,
  +                                         r, NULL, r->server,
  +                                         NULL, NULL, NULL);
   }
   
   int modperl_callback_connection(int idx, conn_rec *c)
   {
  -    return modperl_callback_run_handlers(idx, NULL, c,
  -                                         c->base_server,
  -                                         MP_HANDLER_TYPE_CONNECTION);
  +    return modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_CONNECTION,
  +                                         NULL, c, c->base_server,
  +                                         NULL, NULL, NULL);
   }
   
   void modperl_callback_process(int idx, apr_pool_t *p, server_rec *s)
   {
  -    modperl_callback_run_handlers(idx, NULL, NULL, s,
  -                                  MP_HANDLER_TYPE_PROCESS, p);
  +    modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_PROCESS,
  +                                  NULL, NULL, s,
  +                                  p, NULL, NULL);
   }
   
   void modperl_callback_files(int idx,
                               apr_pool_t *pconf, apr_pool_t *plog,
                               apr_pool_t *ptemp, server_rec *s)
   {
  -    modperl_callback_run_handlers(idx, NULL, NULL, s,
  -                                  MP_HANDLER_TYPE_FILES,
  +    modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_FILES,
  +                                  NULL, NULL, s,
                                     pconf, plog, ptemp);
   }
  
  
  
  1.18      +5 -2      modperl-2.0/src/modules/perl/modperl_callback.h
  
  Index: modperl_callback.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_callback.h,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- modperl_callback.h        2001/03/16 05:08:15     1.17
  +++ modperl_callback.h        2001/03/16 17:23:24     1.18
  @@ -13,8 +13,11 @@
   int modperl_callback(pTHX_ modperl_handler_t *handler, apr_pool_t *p,
                        server_rec *s, AV *args);
   
  -int modperl_callback_run_handlers(int idx, request_rec *r, conn_rec *c,
  -                                  server_rec *s, int type, ...);
  +int modperl_callback_run_handlers(int idx, int type,
  +                                  request_rec *r, conn_rec *c, server_rec *s,
  +                                  apr_pool_t *pconf,
  +                                  apr_pool_t *plog,
  +                                  apr_pool_t *ptemp);
   
   int modperl_callback_per_dir(int idx, request_rec *r);
   
  
  
  
  1.5       +13 -8     modperl-2.0/src/modules/perl/modperl_handler.c
  
  Index: modperl_handler.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_handler.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- modperl_handler.c 2001/03/16 07:30:22     1.4
  +++ modperl_handler.c 2001/03/16 17:23:24     1.5
  @@ -67,33 +67,38 @@
   MpAV **modperl_handler_lookup_handlers(modperl_config_dir_t *dcfg,
                                          modperl_config_srv_t *scfg,
                                          modperl_config_req_t *rcfg,
  -                                       int type, int idx,
  +                                       apr_pool_t *p,
  +                                       int type, int idx, int lvalue,
                                          const char **desc)
   {
  -    MpAV *av = NULL;
  +    MpAV **avp = NULL;
   
       switch (type) {
         case MP_HANDLER_TYPE_PER_DIR:
  -        av = dcfg->handlers_per_dir[idx];
  +        avp = &dcfg->handlers_per_dir[idx];
           set_desc(per_dir);
           break;
         case MP_HANDLER_TYPE_PER_SRV:
  -        av = scfg->handlers_per_srv[idx];
  +        avp = &scfg->handlers_per_srv[idx];
           set_desc(per_srv);
           break;
         case MP_HANDLER_TYPE_CONNECTION:
  -        av = scfg->handlers_connection[idx];
  +        avp = &scfg->handlers_connection[idx];
           set_desc(connection);
           break;
         case MP_HANDLER_TYPE_FILES:
  -        av = scfg->handlers_files[idx];
  +        avp = &scfg->handlers_files[idx];
           set_desc(files);
           break;
         case MP_HANDLER_TYPE_PROCESS:
  -        av = scfg->handlers_process[idx];
  +        avp = &scfg->handlers_process[idx];
           set_desc(process);
           break;
       };
   
  -    return av ? &av : NULL;
  +    if (lvalue && avp && !*avp && p) {
  +        *avp = apr_array_make(p, lvalue, sizeof(modperl_handler_t *));
  +    }
  +
  +    return avp;
   }
  
  
  
  1.4       +2 -1      modperl-2.0/src/modules/perl/modperl_handler.h
  
  Index: modperl_handler.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_handler.h,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- modperl_handler.h 2001/03/16 06:41:46     1.3
  +++ modperl_handler.h 2001/03/16 17:23:25     1.4
  @@ -11,7 +11,8 @@
   MpAV **modperl_handler_lookup_handlers(modperl_config_dir_t *dcfg,
                                          modperl_config_srv_t *scfg,
                                          modperl_config_req_t *rcfg,
  -                                       int type, int idx,
  +                                       apr_pool_t *p,
  +                                       int type, int idx, int lvalue,
                                          const char **desc);
   
   #endif /* MODPERL_HANDLER_H */
  
  
  
  1.29      +6 -0      modperl-2.0/src/modules/perl/modperl_types.h
  
  Index: modperl_types.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- modperl_types.h   2001/03/16 07:30:23     1.28
  +++ modperl_types.h   2001/03/16 17:23:25     1.29
  @@ -196,6 +196,12 @@
   typedef struct {
       HV *pnotes;
       modperl_wbucket_t wbucket;
  +    MpAV *handlers_per_dir[MP_HANDLER_NUM_PER_DIR];
  +    MpAV *handlers_per_srv[MP_HANDLER_NUM_PER_SRV];
   } modperl_config_req_t;
  +
  +typedef struct {
  +    MpAV *handlers_connection[MP_HANDLER_NUM_CONNECTION];
  +} modperl_config_con_t;
   
   #endif /* MODPERL_TYPES_H */
  
  
  

Reply via email to