i'm not sure if anyone will ever find this useful but this makes 
$Application a per-process global var if you prefer that. this is
probably terribly coded but it works for what i need (i'm definitely
not a perl guru). please suggest improvement if you can ;)

need 
        PerlSetVar AppDataPerProcess 1 

in config file. 

jr
-- 
------------------------------------------------------------------------
Joel W. Reed                              http://ruby.ddiworld.com/jreed
-------------------Portable: survives system reboot.-------------------


--- ASP.pm      Thu Feb  3 20:35:08 2000
+++ /usr/lib/perl5/site_perl/5.005/Apache/ASP.pm        Wed Mar 29 09:51:29 2000
@@ -250,6 +250,7 @@
     $r->dir_config('GlobalPackage', $args{GlobalPackage});
     $r->dir_config('StatINC', $args{StatINC});
     $r->dir_config('StatINCMatch', $args{StatINCMatch});
+    $r->dir_config('AppDataPerProcess', $args{AppDataPerProcess});
     
     eval {
        my $asp = Apache::ASP::new($r);    
@@ -395,6 +396,7 @@
        stat_scripts     => defined $r->dir_config('StatScripts') ? 
$r->dir_config('StatScripts') : 1,
        stat_inc       => $r->dir_config('StatINC'),    
        stat_inc_match => $r->dir_config('StatINCMatch'),
+       app_data_per_process => $r->dir_config('AppDataPerProcess'),
        
 # moved state to state config
 #        state_cache => $r->dir_config('StateCache'),
@@ -571,12 +573,14 @@
     $self->{app_state} = (defined $r->dir_config('AllowApplicationState') ? 
                           $r->dir_config('AllowApplicationState') : 1);
     if($self->{app_state}) {
-       ($self->{Application} = &Apache::ASP::Application::new($self)) 
-         || $self->Error("can't get application state");
-       if($self->{dbg}) {
+      if (!$self->{app_data_per_process}) {
+         ($self->{Application} = &Apache::ASP::Application::new($self)) 
+           || $self->Error("can't get application state");
+         if($self->{dbg}) {
            $self->{Application}->Lock();
            $self->Debug('created $Application', $self->{Application});
            $self->{Application}->UnLock();     
+         }
        }
     } else {
        $self->{dbg} && $self->Debug("no application allowed config");
@@ -1147,6 +1151,11 @@
     $self->UndefRoutine($subid);
     $self->{dbg} && $self->Debug("compiling into package $self->{'package'} subid 
$subid");    
 
+    my $hack = "";
+      if (!$self->{app_data_per_process}) {
+       $hack = "use vars qw(%Application);\n*Application = 
+\\%Apache::ASP::ApplicationPerProcess::Application;",
+      }
+
     my $eval = 
       join(" ;; ", 
           "package $self->{'package'};",
@@ -1154,6 +1163,7 @@
 #         "use vars qw(\$".join(" \$",@Apache::ASP::Objects).');',
           "sub $subid { ",
           ' return(1) unless $_[0]; ', #@_ = ();',
+          $hack,
           $$script,
           '}',
          );
@@ -2110,11 +2120,17 @@
     my $code = $exists ? $asp->ReadFile($filename) : "";
     my $strict = $asp->{use_strict} ? "use strict" : "no strict";
     $code =~ s/\<\/?script?.*?\>/\#script tag removed here/igs;
+    my $hack = "";
+      if (!$self->{app_data_per_process}) {
+       $hack = "use vars qw(%Application);\n*Application = 
+\\%Apache::ASP::ApplicationPerProcess::Application;",
+        }
+
     $code = join(" ;; ",
                 "package $self->{'package'};",
                 $strict,
                 "use vars qw(\$".join(" \$",@Apache::ASP::Objects).');',
                 "use lib qw($self->{asp}->{global});",
+                $hack,
                 $code,
                 'sub exit { $main::Response->End(); } ',
                 '1;',
@@ -2240,14 +2256,16 @@
     my $asp = $self->{asp};
     $asp->Debug("Application_OnEnd");
     $self->Execute('Application_OnEnd');
-    delete $asp->{Internal}{'application'};
+      if (! $asp->{app_data_per_process}) {
+       delete $asp->{Internal}{'application'};
     
-    local $^W = 0;
-    my $tied = tied %{$asp->{Application}};
-    untie %{$asp->{Application}};
-    $tied->DESTROY(); # call explicit DESTROY
-    $asp->{Application} = &Apache::ASP::Application::new($self->{asp})
-      || $self->Error("can't get application state");
+       local $^W = 0;
+       my $tied = tied %{$asp->{Application}};
+       untie %{$asp->{Application}};
+       $tied->DESTROY(); # call explicit DESTROY
+       $asp->{Application} = &Apache::ASP::Application::new($self->{asp})
+         || $self->Error("can't get application state");
+      }
 }
 
 sub ScriptOnStart {
@@ -3302,6 +3320,14 @@
     }
 }
 
+1;
+
+# ApplicationPerProcess Implementation
+package Apache::ASP::ApplicationPerProcess;
+use strict;
+use vars qw(%Application);
+%Application = (
+);
 1;
 
 # Session Object

Reply via email to