I suppose that since $apr->param is an XSUB perl decides that it's unsafe to interrupt it. Or may be it's an OS issue, so perl doesn't even get a chance to intervene.
Have you tried strace(1)ing httpd and seeing where does it hang? Of course start the server with -X so you have only one pid to track.
The output of strace is too long, here are some of the last lines:
read(4, "", 4096) = 0
close(4) = 0
munmap(0x40330000, 4096) = 0
brk(0x8ab4000) = 0x8ab4000
open("/tmp/Apache-Session-e332c162d925d21c424a1a43e809e2fd.lock", O_RDWR|O_CREAT|O_TRUNC|O_LAR
GEFILE, 0666) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
flock(4, LOCK_SH) = 0
stat64("/home/ag/development/test/src/sessions/e332c162d925d21c424a1a43e809e2fd", {st_mode =S_IFREG|0644, st_size=81, ...}) = 0
open("/home/ag/development/test/src/sessions/e332c162d925d21c424a1a43e809e2fd", O_RDWR|O_C REAT|O_LARGEFILE, 0666) = 5
fcntl64(5, F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat64(5, {st_mode=S_IFREG|0644, st_size=81, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40330000
_llseek(5, 0, [0], SEEK_CUR) = 0
fstat64(5, {st_mode=S_IFREG|0644, st_size=81, ...}) = 0
fcntl64(5, F_SETFD, FD_CLOEXEC) = 0
read(5, "\5\6\3\0\0\0\3\n e332c162d925d21c424a1a4"..., 4096) = 81
read(5, "", 4096) = 0
read(5, "", 4096) = 0
stat64("/usr/lib/perl5/i386-linux/auto/Storable/thaw.al", {st_mode=S_IFREG|0444, st_size=662, ...}) = 0
getgroups32(32, [500, 16, 10]) = 3
open("/usr/lib/perl5/i386-linux/auto/Storable/thaw.al", O_RDONLY|O_LARGEFILE) = 6
brk(0x8ab5000) = 0x8ab5000
fstat64(6, {st_mode=S_IFREG|0444, st_size=662, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40331000
read(6, "# NOTE: Derived from blib/lib/St"..., 4096) = 662
brk(0x8ab6000) = 0x8ab6000
close(6) = 0
munmap(0x40331000, 4096) = 0
brk(0x8ab9000) = 0x8ab9000
alarm(300) = 0
read(3, "------------SFQ0oV5N2ysZosOirvfy"..., 4096) = 664
alarm(0) = 300
alarm(300) = 0
read(3, 0x8293b7c, 4096) = ? ERESTARTSYS (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
read(3, 0x8293b7c, 4096) = ? ERESTARTSYS (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
read(3, 0x8293b7c, 4096) = ? ERESTARTSYS (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
read(3,
it hanged here. Seems after 300 seconds, it continued and died:
0x8293b7c, 4096) = ? ERESTARTSYS (To be restarted) --- SIGALRM (Alarm clock) @ 0 (0) --- +++ killed by SIGALRM +++
Is it related to the reading request from the client ? Will front-end server solve the problem ?
Sincerely, Alex
-- Reporting bugs: http://perl.apache.org/bugs/ Mail list info: http://perl.apache.org/maillist/modperl.html