summaryrefslogtreecommitdiff
path: root/project2/cgi
diff options
context:
space:
mode:
authorrandomdan <randomdan@localhost>2010-08-25 19:41:25 +0000
committerrandomdan <randomdan@localhost>2010-08-25 19:41:25 +0000
commit55376f112a70a734040cf7f038fbef0eb3049ef0 (patch)
treed70bcc0c9e7cb4db49a97ea3e12c0c072ccb7dad /project2/cgi
parentDon't create the SHM session mapping until something tries to use it (diff)
downloadproject2-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.cpp16
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 {