diff --git a/znc.cpp b/znc.cpp index 4b022d95..00599956 100644 --- a/znc.cpp +++ b/znc.cpp @@ -1992,3 +1992,7 @@ void CZNC::LeakConnectUser(CConnectUserTimer *pTimer) { if (m_pConnectUserTimer == pTimer) m_pConnectUserTimer = NULL; } + +CRealListener::~CRealListener() { + m_pParent->SetRealListener(NULL); +} diff --git a/znc.h b/znc.h index 269b9055..5ae330e2 100644 --- a/znc.h +++ b/znc.h @@ -175,8 +175,8 @@ protected: class CRealListener : public CZNCSock { public: - CRealListener() : CZNCSock() {} - virtual ~CRealListener() {} + CRealListener(CListener *pParent) : CZNCSock(), m_pParent(pParent) {} + virtual ~CRealListener(); virtual bool ConnectionFrom(const CString& sHost, unsigned short uPort) { bool bHostAllowed = CZNC::Get().IsHostAllowed(sHost); @@ -203,6 +203,9 @@ public: Close(); } } + +private: + CListener* m_pParent; }; class CListener { @@ -225,6 +228,7 @@ public: void SetAddrType(EAddrType eAddr) { m_eAddr = eAddr; } void SetPort(unsigned short u) { m_uPort = u; } void SetBindHost(const CString& s) { m_sBindHost = s; } + void SetRealListener(CRealListener* p) { m_pListener = p; } // !Setters // Getters @@ -240,7 +244,7 @@ public: return false; } - m_pListener = new CRealListener; + m_pListener = new CRealListener(this); bool bSSL = false; #ifdef HAVE_LIBSSL