Hi,
When using the following script under mod_perl, each httpd process crashes on
the 2nd request to execute this script.
------------
#!/usr/bin/perl
use strict; use POSIX qw(locale_h);
setlocale(LC_ALL,'en_US.utf8');
print "Expires: 1 Jan 1970\nContent-Type: text/html\n\nHi";
-------------
This crashes if instead of 'en_US.utf8' one uses any other utf8 locale that
is available in the system. If one uses locale with single-byte encoding (e.g.
'en_US.ascii' or 'ru_RU.koi8r') it doesn't crash httpd. (I didn't try
other multibyte encodings beside utf8).
If one uses LC_COLLATE instead of LC_ALL, it doesn't crash for any locale (I
didn't try other locale categories). (The httpd server is started under
locale 'ru_RU.koi8r' - a single-byte locale).
I'm using mod_perl on RH72 for x86, versions of the relevant software:
perl-5.6.0-17
mod_perl-1.24_01-3
glibc-2.2.4-19.3
apache-1.3.20-16
It seems it's a bug in mod_perl, since the following C program
----------
#include <locale.h>
#include <stdlib.h>
int main(int argc,char** argv)
{
setlocale(LC_ALL,"en_US.utf8");
printf("try 1\n");
setlocale(LC_ALL,"en_US.utf8");
printf("try 2\n");
setlocale(LC_ALL,"en_US.utf8");
printf("try 3\n");
return 0;
}
------------
Works without crashing.
Also, the following perl script:
------------
#!/usr/bin/perl
use strict;
use POSIX qw(locale_h);
for(my $i=0;$i<10; ++$i)
{
setlocale(LC_ALL,'en_US.utf8');
}
print "done\n";
------------
Works without crashing too.
Granted, LC_COLLATE it's enough for my scripts, so this bug is not fatal to
me.
Best regards,
-Vlad