diff --git a/Source/cmServer.cxx b/Source/cmServer.cxx index b0675da3a..f7e5e3b6f 100644 --- a/Source/cmServer.cxx +++ b/Source/cmServer.cxx @@ -220,7 +220,7 @@ cmServerResponse cmServer::SetProtocolVersion(const cmServerRequest& request) } std::string errorMessage; - if (!this->Protocol->Activate(request, &errorMessage)) { + if (!this->Protocol->Activate(this, request, &errorMessage)) { this->Protocol = CM_NULLPTR; return request.ReportError("Failed to activate protocol version: " + errorMessage); diff --git a/Source/cmServer.h b/Source/cmServer.h index dde5333ca..433b2ac33 100644 --- a/Source/cmServer.h +++ b/Source/cmServer.h @@ -95,6 +95,7 @@ private: mutable bool Writing = false; - friend class cmServerRequest; friend class cmServerConnection; + friend class cmServerProtocol; + friend class cmServerRequest; }; diff --git a/Source/cmServerProtocol.cxx b/Source/cmServerProtocol.cxx index 030b0fd74..16a6374a4 100644 --- a/Source/cmServerProtocol.cxx +++ b/Source/cmServerProtocol.cxx @@ -109,9 +109,12 @@ Json::Value cmServerResponse::Data() const return this->m_Data; } -bool cmServerProtocol::Activate(const cmServerRequest& request, +bool cmServerProtocol::Activate(cmServer* server, + const cmServerRequest& request, std::string* errorMessage) { + assert(server); + this->m_Server = server; this->m_CMakeInstance = std::make_unique(); const bool result = this->DoActivate(request, errorMessage); if (!result) diff --git a/Source/cmServerProtocol.h b/Source/cmServerProtocol.h index bab949b75..92c816291 100644 --- a/Source/cmServerProtocol.h +++ b/Source/cmServerProtocol.h @@ -87,7 +87,8 @@ public: virtual bool IsExperimental() const = 0; virtual const cmServerResponse Process(const cmServerRequest& request) = 0; - bool Activate(const cmServerRequest& request, std::string* errorMessage); + bool Activate(cmServer* server, const cmServerRequest& request, + std::string* errorMessage); protected: cmake* CMakeInstance() const; @@ -97,6 +98,7 @@ protected: private: std::unique_ptr m_CMakeInstance; + cmServer* m_Server = nullptr; // not owned! friend class cmServer; };