summaryrefslogtreecommitdiff
path: root/project2/cgi
diff options
context:
space:
mode:
authorrandomdan <randomdan@localhost>2011-01-25 00:24:29 +0000
committerrandomdan <randomdan@localhost>2011-01-25 00:24:29 +0000
commite7972737bc49bbf590dce3e219c9001634419168 (patch)
treeeb4789b530073242e09708613b3eb9fb3f988598 /project2/cgi
parentCentralise the ICE splicer (diff)
downloadproject2-e7972737bc49bbf590dce3e219c9001634419168.tar.bz2
project2-e7972737bc49bbf590dce3e219c9001634419168.tar.xz
project2-e7972737bc49bbf590dce3e219c9001634419168.zip
Fix Presenter's inheritance of CommonObjects
Use smart pointers to stages, they are refcounted after all Have variables keep a handle to their row sources, fixes crash during stage destruction
Diffstat (limited to 'project2/cgi')
-rw-r--r--project2/cgi/cgiAppEngine.cpp6
-rw-r--r--project2/cgi/cgiAppEngine.h12
2 files changed, 9 insertions, 9 deletions
diff --git a/project2/cgi/cgiAppEngine.cpp b/project2/cgi/cgiAppEngine.cpp
index 12a30d7..d1c1579 100644
--- a/project2/cgi/cgiAppEngine.cpp
+++ b/project2/cgi/cgiAppEngine.cpp
@@ -48,9 +48,7 @@ void
CgiApplicationEngine::process() const
{
while (!doc && currentStage) {
- Stage * prev = currentStage;
currentStage = currentStage->run();
- delete prev;
}
if (!sessionID.is_nil()) {
header->setCookie(cgicc::HTTPCookie(SESSIONID, sessionID.str(), "Session ID",
@@ -82,7 +80,7 @@ CgiApplicationEngine::PresentStage::~PresentStage()
{
}
-CgiApplicationEngine::Stage *
+CgiApplicationEngine::StagePtr
CgiApplicationEngine::PresentStage::run()
{
BOOST_FOREACH(OrderedParamCheckers::value_type pc, parameterChecks) {
@@ -150,7 +148,7 @@ CgiApplicationEngine::RequestStage::RequestStage(const CgiApplicationEngine * e,
CgiApplicationEngine::RequestStage::~RequestStage()
{
}
-CgiApplicationEngine::Stage *
+CgiApplicationEngine::StagePtr
CgiApplicationEngine::RequestStage::run()
{
BOOST_FOREACH(OrderedParamCheckers::value_type pc, parameterChecks) {
diff --git a/project2/cgi/cgiAppEngine.h b/project2/cgi/cgiAppEngine.h
index abd4b9e..532b74d 100644
--- a/project2/cgi/cgiAppEngine.h
+++ b/project2/cgi/cgiAppEngine.h
@@ -37,11 +37,13 @@ class CgiApplicationEngine : public ApplicationEngine {
mutable cgicc::HTTPContentHeader * header;
private:
mutable boost::shared_ptr<xmlpp::Document> doc;
- class Stage : public CommonObjects {
+ class Stage;
+ typedef boost::intrusive_ptr<Stage> StagePtr;
+ class Stage : public virtual CommonObjects {
public:
Stage(const CgiApplicationEngine *);
virtual ~Stage() = 0;
- virtual Stage * run() = 0;
+ virtual StagePtr run() = 0;
protected:
const CgiApplicationEngine * appEngine;
};
@@ -49,7 +51,7 @@ class CgiApplicationEngine : public ApplicationEngine {
public:
RequestStage(const CgiApplicationEngine *, const std::string & id);
virtual ~RequestStage();
- virtual Stage * run();
+ virtual StagePtr run();
std::string present;
protected:
OrderedParamCheckers parameterChecks;
@@ -60,9 +62,9 @@ class CgiApplicationEngine : public ApplicationEngine {
PresentStage(const CgiApplicationEngine *, const std::string & id);
PresentStage(const CgiApplicationEngine *, const std::string & group, const std::string & id);
virtual ~PresentStage();
- virtual Stage * run();
+ virtual StagePtr run();
};
- mutable Stage * currentStage;
+ mutable StagePtr currentStage;
mutable UUID sessionID;
};