Recently, we encountered an odd problem with mod_perl 1.24 and Oracle. We
were using mod_perl as an Apache DSO.  The application server we were
debugging would execute database queries fine for a few minutes, and then
queries would start failing with the following Oracle error message:

    ORA-03113: end-of-file on communication channel

Not all queries, just some of them; enough to wreck the page render.  The
application server would also segfault whenever any of its processes tried
to shut down, or whenever we executed a Perl module the communicates with
Critical Path's messaging servers.

Intensive debugging and experimentation revealed that the ORA-03113
problem was caused by the application inadvertently connecting to the
database during Apache parent process startup.  This is specifically
forbidden in the mod_perl man page.  Preventing that initial connection
solved this problem.

However, after fixing our application, we still encountered segfaults,
both on process exit and when we used our Critical Path interface.  This
was particularly confusing, since the CP module was pure Perl; its only
dependency was on IO::Socket::INET, which seemed solid enough.

Frustrated, we ended up rebuilding mod_perl with USE_DSO=0, and that
completely eliminated the segmentation faults.  So, as a suggestion, if
you're encountering unusual problems with mod_perl, and you've got
USE_DSO=1, try turning it off.  It might save you a lot of hassle.

There's one other message that I found in the mod_perl archives that I'd
like to add as a link here.  (Naturally, we ran across it _after_ we had
rebuilt with USE_DSO=0 :-)
<http://www.egroups.com/message/modperl/16614?expand=1>


- Paul

Reply via email to