From 6f6fa13042f319bcd56ceed112c0a969337e4161 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Thu, 23 Apr 2020 13:24:26 +0100 Subject: Opt-out of pgsql read and write events if polling fails. --- src/modules/extra/m_pgsql.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/modules/extra/m_pgsql.cpp') diff --git a/src/modules/extra/m_pgsql.cpp b/src/modules/extra/m_pgsql.cpp index ac247548a..3838f2b5c 100644 --- a/src/modules/extra/m_pgsql.cpp +++ b/src/modules/extra/m_pgsql.cpp @@ -51,8 +51,9 @@ typedef std::map ConnMap; * WWRITE, Connected/Working and wants write event * RREAD, Resetting and wants read event * RWRITE, Resetting and wants write event + * DEAD, The connection has died */ -enum SQLstatus { CREAD, CWRITE, WREAD, WWRITE, RREAD, RWRITE }; +enum SQLstatus { CREAD, CWRITE, WREAD, WWRITE, RREAD, RWRITE, DEAD }; class ReconnectTimer : public Timer { @@ -265,6 +266,8 @@ class SQLConn : public SQLProvider, public EventHandler status = CREAD; return true; case PGRES_POLLING_FAILED: + ServerInstance->SE->ChangeEventMask(this, FD_WANT_NO_READ | FD_WANT_NO_WRITE); + status = DEAD; return false; case PGRES_POLLING_OK: ServerInstance->SE->ChangeEventMask(this, FD_WANT_POLL_READ | FD_WANT_NO_WRITE); @@ -380,7 +383,7 @@ restart: { DoResetPoll(); } - else + else if (status == WREAD || status == WWRITE) { DoConnectedPoll(); } @@ -488,6 +491,7 @@ restart: void Close() { + status = DEAD; ServerInstance->SE->DelFd(this); if(sql) @@ -606,6 +610,7 @@ void ReconnectTimer::Tick(time_t time) void SQLConn::DelayReconnect() { + status = DEAD; ModulePgSQL* mod = (ModulePgSQL*)(Module*)creator; ConnMap::iterator it = mod->connections.find(conf->getString("id")); if (it != mod->connections.end()) -- cgit v1.3.1-10-gc9f91