geoff       2003/08/11 13:34:23

  Modified:    lib/ModPerl Code.pm
               src/modules/perl mod_perl.c modperl_callback.c
                        modperl_callback.h modperl_config.c
                        modperl_filter.c modperl_types.h modperl_util.h
               t/hooks/TestHooks init.pm push_handlers.pm
                        stacked_handlers.pm
               xs/tables/current/ModPerl FunctionTable.pm
  Added:       t/hooks  stacked_handlers2.t
               t/hooks/TestHooks stacked_handlers2.pm
  Log:
  alter stacked handler interface so that mod_perl follows Apache
  as closely as possible with respect to VOID/RUN_FIRST/RUN_ALL
  handler types.  now, for phases where OK ends the Apache
  call list (RUN_FIRST handlers, such as the PerlTransHandler),
  mod_perl follows suit and leaves some handlers uncalled.
  Submitted by: geoff
  Reviewed by:  stas
  
  Revision  Changes    Path
  1.101     +21 -6     modperl-2.0/lib/ModPerl/Code.pm
  
  Index: Code.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/lib/ModPerl/Code.pm,v
  retrieving revision 1.100
  retrieving revision 1.101
  diff -u -r1.100 -r1.101
  --- Code.pm   20 May 2003 01:31:49 -0000      1.100
  +++ Code.pm   11 Aug 2003 20:34:22 -0000      1.101
  @@ -37,27 +37,32 @@
       Process    => {
           ret  => 'void',
           args => [{type => 'apr_pool_t', name => 'p'},
  -                 {type => 'server_rec', name => 's'}],
  +                 {type => 'server_rec', name => 's'},
  +                 {type => 'dummy', name => 'VOID'}],
       },
       Files      => {
           ret  => 'int',
           args => [{type => 'apr_pool_t', name => 'pconf'},
                    {type => 'apr_pool_t', name => 'plog'},
                    {type => 'apr_pool_t', name => 'ptemp'},
  -                 {type => 'server_rec', name => 's'}],
  +                 {type => 'server_rec', name => 's'},
  +                 {type => 'dummy', name => 'RUN_ALL'}],
       },
       PerSrv     => {
           ret  => 'int',
  -        args => [{type => 'request_rec', name => 'r'}],
  +        args => [{type => 'request_rec', name => 'r'}, 
  +                 {type => 'dummy', name => 'RUN_ALL'}],
       },
       Connection => {
           ret  => 'int',
  -        args => [{type => 'conn_rec', name => 'c'}],
  +        args => [{type => 'conn_rec', name => 'c'},
  +                 {type => 'dummy', name => 'RUN_FIRST'}],
       },
       PreConnection => {
           ret  => 'int',
           args => [{type => 'conn_rec', name => 'c'},
  -                 {type => 'void', name => 'csd'}],
  +                 {type => 'void', name => 'csd'},
  +                 {type => 'dummy', name => 'RUN_ALL'}],
       },
   );
   
  @@ -211,6 +216,12 @@
               my($protostr, $pass) = canon_proto($prototype, $name);
               my $ix = $self->{handler_index}->{$class}->[$i];
   
  +            if ($callback =~ m/modperl_callback_per_(dir|srv)/) {
  +                if ($ix =~ m/AUTH|TYPE|TRANS/) {
  +                    $pass =~ s/RUN_ALL/RUN_FIRST/;
  +                }
  +            }
  +
               print $h_fh "\n$protostr;\n";
   
               print $c_fh <<EOF;
  @@ -557,8 +568,12 @@
   
   sub canon_args {
       my $args = shift->{args};
  -    my @in   = map { "$_->{type} *$_->{name}" } @$args;
       my @pass = map { $_->{name} } @$args;
  +    my @in;
  +    foreach my $href (@$args) {
  +        push @in, "$href->{type} *$href->{name}"
  +            unless $href->{type} eq 'dummy';
  +    }
       return wantarray ? ([EMAIL PROTECTED], [EMAIL PROTECTED]) : [EMAIL PROTECTED];
   }
   
  
  
  
  1.177     +2 -2      modperl-2.0/src/modules/perl/mod_perl.c
  
  Index: mod_perl.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v
  retrieving revision 1.176
  retrieving revision 1.177
  diff -u -r1.176 -r1.177
  --- mod_perl.c        11 Aug 2003 18:02:43 -0000      1.176
  +++ mod_perl.c        11 Aug 2003 20:34:22 -0000      1.177
  @@ -660,7 +660,7 @@
       char *level = NULL;
       server_rec *s = (server_rec *)data;
       
  -    modperl_callback_process(MP_CHILD_EXIT_HANDLER, server_pool, s);
  +    modperl_callback_process(MP_CHILD_EXIT_HANDLER, server_pool, s, VOID);
       
       if ((level = getenv("PERL_DESTRUCT_LEVEL"))) {
           modperl_destruct_level = atoi(level);
  @@ -849,7 +849,7 @@
   
       modperl_response_init(r);
   
  -    retval = modperl_callback_per_dir(MP_RESPONSE_HANDLER, r);
  +    retval = modperl_callback_per_dir(MP_RESPONSE_HANDLER, r, RUN_FIRST);
   
       if ((retval == DECLINED) && r->content_type) {
           r->handler = r->content_type; /* let http_core or whatever try */
  
  
  
  1.55      +71 -20    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.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- modperl_callback.c        17 Feb 2003 09:03:16 -0000      1.54
  +++ modperl_callback.c        11 Aug 2003 20:34:22 -0000      1.55
  @@ -81,7 +81,8 @@
                                     request_rec *r, conn_rec *c, server_rec *s,
                                     apr_pool_t *pconf,
                                     apr_pool_t *plog,
  -                                  apr_pool_t *ptemp)
  +                                  apr_pool_t *ptemp,
  +                                  modperl_hook_run_mode_e run_mode)
   {
   #ifdef USE_ITHREADS
       pTHX;
  @@ -188,17 +189,61 @@
           
           MP_TRACE_h(MP_FUNC, "%s returned %d\n", handlers[i]->name, status);
   
  -        if ((status != OK) && (status != DECLINED)) {
  -            status = modperl_errsv(aTHX_ status, r, s);
  +        /* follow Apache's lead and let OK terminate the phase for
  +         * RUN_FIRST handlers.  RUN_ALL handlers keep going on OK.
  +         * VOID handler ignore all errors.
  +         */
  +
  +        if (run_mode == RUN_ALL) {
  +            /* the normal case:
  +             *   OK and DECLINED continue 
  +             *   errors end the phase
  +             */
  +            if ((status != OK) && (status != DECLINED)) {
  +
  +                status = modperl_errsv(aTHX_ status, r, s);
   #ifdef MP_TRACE
  -            if (i+1 != nelts) {
  -                MP_TRACE_h(MP_FUNC, "there were %d uncalled handlers\n",
  -                           nelts-i-1);
  -            }
  +                if (i+1 != nelts) {
  +                    MP_TRACE_h(MP_FUNC, "error status %d leaves %d uncalled 
handlers\n",
  +                               status, desc, nelts-i-1);
  +                }
   #endif
  -            break;
  +                break;
  +            }
           }
  +        else if (run_mode == RUN_FIRST) {
  +            /* the exceptional case:
  +             *   OK and errors end the phase
  +             *   DECLINED continues
  +             */
   
  +            if (status == OK) {
  +#ifdef MP_TRACE
  +                if (i+1 != nelts) {
  +                    MP_TRACE_h(MP_FUNC, "OK ends the %s stack, leaving %d uncalled 
handlers\n",
  +                               desc, nelts-i-1);
  +                }
  +#endif
  +                break;
  +            }
  +            if (status != DECLINED) {
  +                status = modperl_errsv(aTHX_ status, r, s);
  +#ifdef MP_TRACE
  +                if (i+1 != nelts) {
  +                    MP_TRACE_h(MP_FUNC, "error status %d leaves %d uncalled 
handlers\n",
  +                               status, desc, nelts-i-1);
  +                }
  +#endif
  +                break;
  +            }
  +        }
  +        else {
  +            /* the rare case.
  +             * VOID handlers completely ignore the return status
  +             * Apache should handle whatever mod_perl returns, 
  +             * so there is no need to mess with the status
  +             */
  +        }
       }
   
       SvREFCNT_dec((SV*)av_args);
  @@ -213,46 +258,52 @@
       return status;
   }
   
  -int modperl_callback_per_dir(int idx, request_rec *r)
  +int modperl_callback_per_dir(int idx, request_rec *r,
  +                             modperl_hook_run_mode_e run_mode)
   {
       return modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_PER_DIR,
                                            r, NULL, r->server,
  -                                         NULL, NULL, NULL);
  +                                         NULL, NULL, NULL, run_mode);
   }
   
  -int modperl_callback_per_srv(int idx, request_rec *r)
  +int modperl_callback_per_srv(int idx, request_rec *r, 
  +                             modperl_hook_run_mode_e run_mode)
   {
       return modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_PER_SRV,
                                            r, NULL, r->server,
  -                                         NULL, NULL, NULL);
  +                                         NULL, NULL, NULL, run_mode);
   }
   
  -int modperl_callback_connection(int idx, conn_rec *c)
  +int modperl_callback_connection(int idx, conn_rec *c, 
  +                                modperl_hook_run_mode_e run_mode)
   {
       return modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_CONNECTION,
                                            NULL, c, c->base_server,
  -                                         NULL, NULL, NULL);
  +                                         NULL, NULL, NULL, run_mode);
   }
   
  -int modperl_callback_pre_connection(int idx, conn_rec *c, void *csd)
  +int modperl_callback_pre_connection(int idx, conn_rec *c, void *csd,
  +                                    modperl_hook_run_mode_e run_mode)
   {
       return modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_PRE_CONNECTION,
                                            NULL, c, c->base_server,
  -                                         NULL, NULL, NULL);
  +                                         NULL, NULL, NULL, run_mode);
   }
   
  -void modperl_callback_process(int idx, apr_pool_t *p, server_rec *s)
  +void modperl_callback_process(int idx, apr_pool_t *p, server_rec *s,
  +                              modperl_hook_run_mode_e run_mode)
   {
       modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_PROCESS,
                                     NULL, NULL, s,
  -                                  p, NULL, NULL);
  +                                  p, NULL, NULL, run_mode);
   }
   
   int modperl_callback_files(int idx,
                              apr_pool_t *pconf, apr_pool_t *plog,
  -                           apr_pool_t *ptemp, server_rec *s)
  +                           apr_pool_t *ptemp, server_rec *s,
  +                           modperl_hook_run_mode_e run_mode)
   {
       return modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_FILES,
                                            NULL, NULL, s,
  -                                         pconf, plog, ptemp);
  +                                         pconf, plog, ptemp, run_mode);
   }
  
  
  
  1.23      +14 -7     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.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- modperl_callback.h        17 Feb 2003 09:03:16 -0000      1.22
  +++ modperl_callback.h        11 Aug 2003 20:34:22 -0000      1.23
  @@ -26,20 +26,27 @@
                                     request_rec *r, conn_rec *c, server_rec *s,
                                     apr_pool_t *pconf,
                                     apr_pool_t *plog,
  -                                  apr_pool_t *ptemp);
  +                                  apr_pool_t *ptemp,
  +                                  modperl_hook_run_mode_e run_mode);
   
  -int modperl_callback_per_dir(int idx, request_rec *r);
  +int modperl_callback_per_dir(int idx, request_rec *r, 
  +                             modperl_hook_run_mode_e run_mode);
   
  -int modperl_callback_per_srv(int idx, request_rec *r);
  +int modperl_callback_per_srv(int idx, request_rec *r,
  +                             modperl_hook_run_mode_e run_mode);
   
  -int modperl_callback_connection(int idx, conn_rec *c);
  +int modperl_callback_connection(int idx, conn_rec *c,
  +                                modperl_hook_run_mode_e run_mode);
   
  -int modperl_callback_pre_connection(int idx, conn_rec *c, void *csd);
  +int modperl_callback_pre_connection(int idx, conn_rec *c, void *csd,
  +                                    modperl_hook_run_mode_e run_mode);
   
  -void modperl_callback_process(int idx, apr_pool_t *p, server_rec *s);
  +void modperl_callback_process(int idx, apr_pool_t *p, server_rec *s,
  +                              modperl_hook_run_mode_e run_mode);
   
   int modperl_callback_files(int idx,
                              apr_pool_t *pconf, apr_pool_t *plog,
  -                           apr_pool_t *ptemp, server_rec *s);
  +                           apr_pool_t *ptemp, server_rec *s,
  +                           modperl_hook_run_mode_e run_mode);
   
   #endif /* MODPERL_CALLBACK_H */
  
  
  
  1.64      +1 -1      modperl-2.0/src/modules/perl/modperl_config.c
  
  Index: modperl_config.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v
  retrieving revision 1.63
  retrieving revision 1.64
  diff -u -r1.63 -r1.64
  --- modperl_config.c  20 May 2003 06:02:47 -0000      1.63
  +++ modperl_config.c  11 Aug 2003 20:34:22 -0000      1.64
  @@ -290,7 +290,7 @@
           rcfg->pnotes = Nullhv;
       }
   
  -    retval = modperl_callback_per_dir(MP_CLEANUP_HANDLER, r);
  +    retval = modperl_callback_per_dir(MP_CLEANUP_HANDLER, r, RUN_ALL);
       
       return retval;
   }
  
  
  
  1.65      +2 -0      modperl-2.0/src/modules/perl/modperl_filter.c
  
  Index: modperl_filter.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_filter.c,v
  retrieving revision 1.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- modperl_filter.c  13 May 2003 09:18:58 -0000      1.64
  +++ modperl_filter.c  11 Aug 2003 20:34:22 -0000      1.65
  @@ -341,6 +341,7 @@
       modperl_filter_mg_set(aTHX_ AvARRAY(args)[0],
                             modperl_filter_new(f, NULL, mode, 0, 0, 0));
   
  +    /* XXX filters are VOID handlers.  should we ignore the status? */
       if ((status = modperl_callback(aTHX_ handler, p, r, s, args)) != OK) {
           status = modperl_errsv(aTHX_ status, r, s);
       }
  @@ -384,6 +385,7 @@
           av_push(args, newSViv(filter->readbytes));
       }
   
  +    /* XXX filters are VOID handlers.  should we ignore the status? */
       if ((status = modperl_callback(aTHX_ handler, p, r, s, args)) != OK) {
           status = modperl_errsv(aTHX_ status, r, s);
       }
  
  
  
  1.68      +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.67
  retrieving revision 1.68
  diff -u -r1.67 -r1.68
  --- modperl_types.h   30 May 2003 12:55:14 -0000      1.67
  +++ modperl_types.h   11 Aug 2003 20:34:22 -0000      1.68
  @@ -248,4 +248,10 @@
       const char *func_name;
   } modperl_module_cmd_data_t;
   
  +typedef enum {
  +    RUN_ALL,
  +    RUN_FIRST,
  +    VOID
  +} modperl_hook_run_mode_e;
  +
   #endif /* MODPERL_TYPES_H */
  
  
  
  1.43      +1 -1      modperl-2.0/src/modules/perl/modperl_util.h
  
  Index: modperl_util.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.h,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- modperl_util.h    14 Mar 2003 05:50:31 -0000      1.42
  +++ modperl_util.h    11 Aug 2003 20:34:22 -0000      1.43
  @@ -64,7 +64,7 @@
       }
   
   /* turn off cgi header parsing. in case we are already inside
  - *     modperl_callback_per_dir(MP_RESPONSE_HANDLER, r); 
  + *     modperl_callback_per_dir(MP_RESPONSE_HANDLER, r, RUN_FIRST); 
    * but haven't sent any data yet, it's too late to change
    * MpReqPARSE_HEADERS, so change the wbucket's private flag directly
    */
  
  
  
  1.1                  modperl-2.0/t/hooks/stacked_handlers2.t
  
  Index: stacked_handlers2.t
  ===================================================================
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::TestRequest;
  use Apache::Test;
  use Apache::TestUtil;
  
  my $module   = "TestHooks::stacked_handlers2";
  Apache::TestRequest::module($module);
  
  my $config   = Apache::Test::config();
  my $hostport = Apache::TestRequest::hostport($config);
  my $path     = Apache::TestRequest::module2path($module);
  
  my $location = "http://$hostport/$path";;
  
  t_debug("connecting to $location");
  
  plan tests => 1;
  
  my $expected = q!ran 2 PerlPostReadRequestHandler handlers
  ran 1 PerlTransHandler handlers
  ran 4 PerlHeaderParserHandler handlers
  ran 2 PerlAccessHandler handlers
  ran 2 PerlAuthenHandler handlers
  ran 2 PerlAuthzHandler handlers
  ran 1 PerlTypeHandler handlers
  ran 2 PerlFixupHandler handlers
  ran 2 PerlResponseHandler handlers
  ran 2 PerlOutputFilterHandler handlers!;
  
  chomp(my $received = GET_BODY_ASSERT $location);
  
  ok t_cmp($expected, $received, "stacked_handlers");
  
  
  
  1.5       +2 -2      modperl-2.0/t/hooks/TestHooks/init.pm
  
  Index: init.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/hooks/TestHooks/init.pm,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- init.pm   31 Mar 2003 01:50:52 -0000      1.4
  +++ init.pm   11 Aug 2003 20:34:22 -0000      1.5
  @@ -8,7 +8,7 @@
   use APR::Table ();
   use Apache::RequestRec ();
   
  -use Apache::Const -compile => 'OK';
  +use Apache::Const -compile => qw(OK DECLINED);
   
   sub first {
       my $r = shift;
  @@ -35,7 +35,7 @@
   
       $r->notes->set(ok3 => $ok + 1);
   
  -    Apache::OK;
  +    Apache::DECLINED;
   }
   
   sub response {
  
  
  
  1.6       +1 -1      modperl-2.0/t/hooks/TestHooks/push_handlers.pm
  
  Index: push_handlers.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/hooks/TestHooks/push_handlers.pm,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- push_handlers.pm  18 Apr 2003 06:18:57 -0000      1.5
  +++ push_handlers.pm  11 Aug 2003 20:34:22 -0000      1.6
  @@ -39,7 +39,7 @@
   }
   
   sub end { return Apache::DONE }
  -sub say { shift->print(shift,"\n"); return Apache::OK }
  +sub say { shift->print(shift,"\n"); return Apache::DECLINED }
   
   sub conf {
       # this one is configured from httpd.conf
  
  
  
  1.6       +2 -2      modperl-2.0/t/hooks/TestHooks/stacked_handlers.pm
  
  Index: stacked_handlers.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/hooks/TestHooks/stacked_handlers.pm,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- stacked_handlers.pm       18 Apr 2003 06:18:57 -0000      1.5
  +++ stacked_handlers.pm       11 Aug 2003 20:34:22 -0000      1.6
  @@ -28,7 +28,7 @@
       $r->content_type('text/plain');
       $r->print("one\n");
   
  -    return Apache::OK;
  +    return Apache::DECLINED;
   }
   
   sub two {
  @@ -36,7 +36,7 @@
   
       $r->print("two\n");
   
  -    return Apache::OK;
  +    return Apache::DECLINED;
   }
   
   sub three {
  
  
  
  1.1                  modperl-2.0/t/hooks/TestHooks/stacked_handlers2.pm
  
  Index: stacked_handlers2.pm
  ===================================================================
  package TestHooks::stacked_handlers2;
  
  # this test exercises the execution of the stacked handlers 
  # connection, translation, authen, authz, type, and response
  # phases should end for the first handler that returns OK
  
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::RequestRec ();
  use Apache::RequestIO ();
  use Apache::Filter ();
  
  use APR::Table;
  
  use Apache::Const -compile => qw(OK DECLINED AUTH_REQUIRED SERVER_ERROR);
  
  sub ok { 
  
      callback(shift);
  
      return Apache::OK 
  }
  
  sub declined { 
  
      callback(shift);
  
      return Apache::DECLINED
  }
  
  sub auth_required { 
  
      callback(shift);
  
      return Apache::AUTH_REQUIRED
  }
  
  sub server_error { 
  
      callback(shift);
  
      return Apache::SERVER_ERROR
  }
  
  sub callback {
  
      my $obj = shift;
  
      my ($r, $callback);
  
      if ($obj->isa('Apache::Filter')) {
          $r = $obj->r;
          $callback = 'PerlOutputFilterHandler';
      }
      else {
          $r = $obj
      }
  
      $callback ||= Apache::current_callback;
  
      my $count = $r->notes->get($callback) || 0;
  
      $r->notes->set($callback, ++$count);
  }
  
  sub handler {
  
      my $r = shift;
  
      $r->content_type('text/plain');
  
      callback($r);
  
      foreach my $callback (qw(PerlPostReadRequestHandler
                               PerlTransHandler
                               PerlHeaderParserHandler 
                               PerlAccessHandler 
                               PerlAuthenHandler 
                               PerlAuthzHandler
                               PerlTypeHandler
                               PerlFixupHandler
                               PerlResponseHandler)) {
  
          my $count = $r->notes->get($callback) || 0;
   
          $r->print("ran $count $callback handlers\n");
      }
  
      return Apache::OK;
  }
  
  sub passthru {
      my $filter = shift;
  
      unless ($filter->ctx) {
         callback($filter);
         $filter->ctx({seen => 1});
      }
  
      while ($filter->read(my $buffer, 1024)) {
          $filter->print($buffer);
      }
  
      # this should be ignored?
      Apache::OK;
  }
  
  sub filter {
      my $filter = shift;
  
      unless ($filter->ctx) {
          callback($filter);
          $filter->ctx({seen => 1});
      }
  
      while ($filter->read(my $buffer, 1024)) {
          $filter->print($buffer);
      }
  
      if ($filter->seen_eos) {
          my $count = $filter->r->notes->get('PerlOutputFilterHandler') || 0;
  
          $filter->print("ran $count PerlOutputFilterHandler handlers\n");
      }
  
      # this should be ignored?
      Apache::OK;
  }
  
  1;
  __DATA__
  # create a new virtual host so we can test (almost all) all the hooks
  <NoAutoConfig>
  <VirtualHost TestHooks::stacked_handlers2>
  
      PerlModule TestHooks::stacked_handlers2
  
      # all 2 run
      PerlPostReadRequestHandler TestHooks::stacked_handlers2::ok 
TestHooks::stacked_handlers2::ok
  
      # 1 run, 1 left behind
      PerlTransHandler TestHooks::stacked_handlers2::ok 
TestHooks::stacked_handlers2::server_error
  
      <Location /TestHooks__stacked_handlers2>
          # all 4 run
          PerlHeaderParserHandler TestHooks::stacked_handlers2::ok 
TestHooks::stacked_handlers2::declined
          PerlHeaderParserHandler TestHooks::stacked_handlers2::declined 
TestHooks::stacked_handlers2::ok
    
          # all 2 run
          PerlAccessHandler TestHooks::stacked_handlers2::ok 
TestHooks::stacked_handlers2::ok 
    
          # 2 run, 1 left behind
          PerlAuthenHandler TestHooks::stacked_handlers2::declined 
TestHooks::stacked_handlers2::ok 
          PerlAuthenHandler TestHooks::stacked_handlers2::auth_required
    
          # 2 run, 1 left behind
          PerlAuthzHandler TestHooks::stacked_handlers2::declined 
TestHooks::stacked_handlers2::ok 
          PerlAuthzHandler TestHooks::stacked_handlers2::auth_required
    
          # 1 run, 1 left behind
          PerlTypeHandler  TestHooks::stacked_handlers2::ok 
TestHooks::stacked_handlers3::server_error
    
          # all 2 run
          PerlFixupHandler TestHooks::stacked_handlers2::ok 
TestHooks::stacked_handlers2::ok
    
          # 2 run, 2 left behind
          PerlResponseHandler TestHooks::stacked_handlers2::declined 
TestHooks::stacked_handlers2 
          PerlResponseHandler TestHooks::stacked_handlers2::ok 
TestHooks::stacked_handlers2::server_error
    
          SetHandler modperl
          AuthType Basic
          Require valid-user
    
          PerlOutputFilterHandler TestHooks::stacked_handlers2::passthru 
TestHooks::stacked_handlers2::filter
      </Location>
  
  </VirtualHost>
  </NoAutoConfig>
  
  
  
  1.118     +28 -0     modperl-2.0/xs/tables/current/ModPerl/FunctionTable.pm
  
  Index: FunctionTable.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/xs/tables/current/ModPerl/FunctionTable.pm,v
  retrieving revision 1.117
  retrieving revision 1.118
  diff -u -r1.117 -r1.118
  --- FunctionTable.pm  7 Jul 2003 03:06:14 -0000       1.117
  +++ FunctionTable.pm  11 Aug 2003 20:34:22 -0000      1.118
  @@ -150,6 +150,10 @@
         {
           'type' => 'conn_rec *',
           'name' => 'c'
  +      },
  +      {
  +        'type' => 'modperl_hook_run_mode_e',
  +        'name' => 'run_mode'
         }
       ]
     },
  @@ -176,6 +180,10 @@
         {
           'type' => 'server_rec *',
           'name' => 's'
  +      },
  +      {
  +        'type' => 'modperl_hook_run_mode_e',
  +        'name' => 'run_mode'
         }
       ]
     },
  @@ -190,6 +198,10 @@
         {
           'type' => 'request_rec *',
           'name' => 'r'
  +      },
  +      {
  +        'type' => 'modperl_hook_run_mode_e',
  +        'name' => 'run_mode'
         }
       ]
     },
  @@ -204,6 +216,10 @@
         {
           'type' => 'request_rec *',
           'name' => 'r'
  +      },
  +      {
  +        'type' => 'modperl_hook_run_mode_e',
  +        'name' => 'run_mode'
         }
       ]
     },
  @@ -222,6 +238,10 @@
         {
           'type' => 'void *',
           'name' => 'csd'
  +      },
  +      {
  +        'type' => 'modperl_hook_run_mode_e',
  +        'name' => 'run_mode'
         }
       ]
     },
  @@ -240,6 +260,10 @@
         {
           'type' => 'server_rec *',
           'name' => 's'
  +      },
  +      {
  +        'type' => 'modperl_hook_run_mode_e',
  +        'name' => 'run_mode'
         }
       ]
     },
  @@ -278,6 +302,10 @@
         {
           'type' => 'apr_pool_t *',
           'name' => 'ptemp'
  +      },
  +      {
  +        'type' => 'modperl_hook_run_mode_e',
  +        'name' => 'run_mode'
         }
       ]
     },
  
  
  

Reply via email to