[PATCH] APC signals + coredump shared memory unmapping

[email protected] (Lucas Nealan) Sun, 23 Dec 2007 03:20:05 -0800
Newsgroups php.apc.dev
Message-ID <C3938467.32DD0%[email protected]>
Hi,

I would like to propose the attached patch against APC CVS HEAD. It provides
the configurable ability to trap coredump related signals and unmap the APC
shared memory segment while still calling any previously installed signal
handlers. This feature would be enabled via a new apc ini entry,
apc.coredump_unmap, which is defaulted to disabled.

Although this will technically work in production environments the
functionality was engineered to solve a problem in shared development
environments that require a really large apc shm size. In these environments
when a coredump occurs in the SAPI, PHP or an extension the coredump file
mayb be many gigabytes. If enough of these are generated concurrently,
writing these large files may bring down a server.

All signal handling is done through sigaction and will be compiled out if
autoconf HAVE_SIGACTION is not set (or it's overrided). The signal handling
also uses SA_SIGINFO in order to maintain the ability to call previously
registered handlers that also use this flag.

Signal handlers are registered per child in module RINIT since SAPIs like
Apache may register their signal handlers after MINIT. Information about the
previous handlers is stored in a module static. I believe this will be safe
in ZTS builds since handlers will only be registered once in a non forking
mode. If requested I will move these into APC globals.

As a note, although newer Linux kernels and other kernels may provide the
facility to ignore various types of shared memory when generating a
coredump, this type of setting does not allow the specificity that this
patch provides. For example someone running Apache/PHP with a large APC
cache may not want their mmaped Apache scoreboard excluded from their
coredump files.

I've also made the patch available at the following url in case the
attachment is problematic:

http://sizzo.org/~screen/patches/apc_signal_unmap.patch

-lucas