Peter Pilsl wrote: > I just cant get the following in my brain. I have a modules that is > started with apache using the PerlModule-directive in httpd.conf. > > This module defines a global pointer on startup that should be the > same in all sub-instances of httpd and really in the current > apache-session all instances print out : $g_ptr : HASH(0x8458a30) > > This hashpointer is later filled with different values (dbhandles, > filehandles ...) that should kept open over more calls. > > Now each session has the same pointer, but the content of the > anonymous hash its pointing too is different in each instance !! > > thread 1: > $g_ptr : HASH(0x8458a30) > $g_ptr->{counter} : SCALAR(0x85aa62c) > > thread 2: > $g_ptr : HASH(0x8458a30) > $g_ptr->{counter} : SCALAR(0x85f5e2c) > > A even more strange example is an anonmous array that has the same > adress, but different content too. > > The only explanation is that there is some mem-mapping for each > httpd-instance, but I dont know much about this. > > My problem now is, that each httpd-instance opens a lot of db-handles > and connections and I end up with system-errors 'to many files opened' > or such things. > > Is there any way to share handles between all instances (I guess not, > and I'm sure this mem-mapping has a deeper meaning too: if more than > one instance access the same adress at the same time there would be > lot of troubles and I'm even more sure that this has something to do > with the copy-on-write feature of fork(), but I'm just not good in > this things, so I'd like to have some comment to be sure that this is > a principal problem and not a problem of my module)
Peter, in the future posts please consider the following: 1. in perl we don't have pointers, but references. I think you'll be more understood if you talk using the Perl terminology, rather than C. 2. it helps to diagnose a problem when a *short* (a few lines) code example is shown, rather than just describing the symptoms. This should give you directions to understanding your problem and solving it: 1. forked children share the same datastructure with a parent until they get modified. When this happens a copy on write occurs and the child process doesn't share the datastructure anymore. See: http://perl.apache.org/guide/performance.html#Know_Your_Operating_System 2. apparently you have the same problem as 'too many connections' problem, and therefore want to look at Apache::DBI for understanding the problem and coming up with a similar solution for your problem. _____________________________________________________________________ Stas Bekman JAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide http://perl.apache.org/guide mailto:[EMAIL PROTECTED] http://ticketmaster.com http://apacheweek.com http://singlesheaven.com http://perl.apache.org http://perlmonth.com/