diff options
| author | 2020-04-23 13:24:26 +0100 | |
|---|---|---|
| committer | 2020-04-24 11:48:45 +0100 | |
| commit | 6f6fa13042f319bcd56ceed112c0a969337e4161 (patch) | |
| tree | e7c3eb95e43784eda7be513f7a236b5dc0a84410 /src/modules/extra/m_pgsql.cpp | |
| parent | Release v2.0.28. (diff) | |
| download | inspircd++-6f6fa13042f319bcd56ceed112c0a969337e4161.tar.gz inspircd++-6f6fa13042f319bcd56ceed112c0a969337e4161.tar.bz2 inspircd++-6f6fa13042f319bcd56ceed112c0a969337e4161.zip | |
Opt-out of pgsql read and write events if polling fails.
Diffstat (limited to 'src/modules/extra/m_pgsql.cpp')
| -rw-r--r-- | src/modules/extra/m_pgsql.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
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<std::string, SQLConn*> 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()) |
