diff options
author | randomdan <randomdan@localhost> | 2010-08-25 19:41:25 +0000 |
---|---|---|
committer | randomdan <randomdan@localhost> | 2010-08-25 19:41:25 +0000 |
commit | 55376f112a70a734040cf7f038fbef0eb3049ef0 (patch) | |
tree | d70bcc0c9e7cb4db49a97ea3e12c0c072ccb7dad /project2/cgi | |
parent | Don't create the SHM session mapping until something tries to use it (diff) | |
download | project2-55376f112a70a734040cf7f038fbef0eb3049ef0.tar.bz2 project2-55376f112a70a734040cf7f038fbef0eb3049ef0.tar.xz project2-55376f112a70a734040cf7f038fbef0eb3049ef0.zip |
Add alarm to be called when p2web has been idle for 60seconds
Use the new onIdle callback to disconnect all cached database connections
Diffstat (limited to 'project2/cgi')
-rw-r--r-- | project2/cgi/p2webMain.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/project2/cgi/p2webMain.cpp b/project2/cgi/p2webMain.cpp index ef070f0..d464406 100644 --- a/project2/cgi/p2webMain.cpp +++ b/project2/cgi/p2webMain.cpp @@ -7,6 +7,7 @@ FILE * realstdout = stdout; #include "cgiEnvironment.h" #include "cgiAppEngine.h" #include <boost/bind.hpp> +#include <syslog.h> #include "FCgiIO.h" int @@ -17,6 +18,12 @@ xmlWrite(void * _out, const char * buf, int len) return len; } +void +p2webGoingIdle(int) +{ + LoaderBase::onIdle(); +} + int main(void) { if (!FCGX_IsCGI()) { @@ -25,7 +32,15 @@ int main(void) FCGX_Init(); FCGX_InitRequest(&request, 0, 0); + struct sigaction onAlarm; + onAlarm.sa_handler = &p2webGoingIdle; + onAlarm.sa_flags = 0; + if (sigaction(SIGALRM, &onAlarm, NULL)) { + syslog(LOG_WARNING, "Failed to set signal handler"); + } + alarm(60); while (FCGX_Accept_r(&request) == 0) { + alarm(0); cgicc::FCgiIO IO(request); try { cgicc::Cgicc cgi(&IO); @@ -48,6 +63,7 @@ int main(void) header.render(IO); IO << "Kaboom!" << std::endl << std::endl << "Unknown exception."; } + alarm(60); } } else { |