Thanks Jim!

--Sudhakar

-----Original Message-----
From: Jim Schueler [mailto:jschue...@eloquency.com] 
Sent: Monday, January 03, 2011 10:47 PM
To: Peram, Sudhakara
Cc: modperl@perl.apache.org
Subject: RE: BerkeleyDB error

The following line needs to be added to httpd.conf

   PerlChildExitHandler Apache::ChildExit

The handler is called when a process is shut down, regardless of which
handlers were called during the process's lifetime.  So this line should
not be inside a directive block.

The module documentation says that Apache::Registry evals the BEGIN {}
blocks only once and evals the END {} blocks every time the
Apache::Registry handler is called.  I originally determined this by
observation- it may also be documented.

Apache::ChildExit::Postpone() moves the END {} blocks from an internal
perl stack to a vector private to Apache::ChildExit.  The handler then
executes those blocks when the process is terminated.  Thus, the
Postpone() method is specifically intended for Apache::Registry.  If
other handlers do a better job alternating BEGIN {} blocks with END {}
blocks, those handlers should never encounter the Postpone() method.  If
the
Postpone() method is used correctly this way, the Apache::ChildExit
handler should be compatible with all your other configured handlers.

BerkeleyDB handles are typically closed in an END {} tag.  But in
Apache::Registry, these handles are still available to subsequent
handler calls.  Because the BerkeleyDB close() command performs cache
flushing and similar housekeeping, subsequent operations on a db handle
don't flush correctly, which ultimately leads to file corruption.

Let me know-

Jim

> Thanks Jim.
> 
> I am bit novice to mod_perl and apache, below is my httpd.conf 
> configuration. Can you please let me know how to use Apache::ChildExit

> module if you have free time.
> 
> Where xxxx is our application name.
> 
> Thank you once again for your help!
> 
> --Sudhakar

Reply via email to