diff options
author | randomdan <randomdan@localhost> | 2011-01-25 00:24:29 +0000 |
---|---|---|
committer | randomdan <randomdan@localhost> | 2011-01-25 00:24:29 +0000 |
commit | e7972737bc49bbf590dce3e219c9001634419168 (patch) | |
tree | eb4789b530073242e09708613b3eb9fb3f988598 /project2/cgi | |
parent | Centralise the ICE splicer (diff) | |
download | project2-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.cpp | 6 | ||||
-rw-r--r-- | project2/cgi/cgiAppEngine.h | 12 |
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; }; |