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/

Reply via email to