RE: Is it me or is mod_perl extremely dangerous?

"Desilets, Alain" <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
> > On Tue, Dec 6, 2011 at 5:35 AM, Desilets, Alain
> > <[email protected]> wrote:
> >> However, even those high quality CPAN modules can fall flat on their face when > they are used in contexts that they weren't designed for. For example, I recently > discovered that several CPAN modules cannot be used safely in a multithreaded or 
> forked environment.
>
> If you're running on a unix environment, you probably want to run
> multi-process, not multithreaded.  Most modules that work in CGI will
> work here, but you need to be aware of issues with opening files and
> sockets before the parent process forks.  This is described in detail
> in the docs.  Is there a specific module that you need that isn't
> working for you?

I'm using Windows. In my experience, modules that don't work well with multithread, also don't work well with fork, and vice-versa.

The one module that I know for sure does not work in a forked or multi-threaded environment is KinoSearch. Because of that, we had to move to the Lucy module instead.

Last summer, I had also concluded (possibly falsely) that there were other modules in my application which were not thread-safe. But I could not identify which ones, because when I ran the app in multi-thread fashion, all I got was a one line error message about not being able to free address such and such. I assumed that this was due to some perl module that was accessing an external DLL, but I can't be sure. I had googled the error message, and I seem to recall that it had been linked to problems with non-thread safe modules. Can't remember the details.

> Package variables are indeed persistent in mod_perl and similar web
> environments.  You should only use them for things that you want to
> persist between requests.  Everything else goes in lexically-scoped
> ("my") variables.

Not sure what you mean by "lexically scoped".

But declaring a variable as "my" is not sufficient to prevent it from being persistent. You can declare a package variable with "my" and it will persist.

Alain
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.