summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2014-01-30 21:44:51 +0100
committerAttila Molnar <attilamolnar@hush.com>2014-01-30 21:44:51 +0100
commit5ac1ffce1168c4e3409e6667ff30285bfbc82bde (patch)
tree09b4ab975d5bfd221aa1341d722524b97764fe4f /src
parent407f10664a5f8ead87967ca52fd6fcb87d09189a (diff)
Allow Timers to delete themselves in Tick()
Diffstat (limited to 'src')
-rw-r--r--src/inspsocket.cpp4
-rw-r--r--src/modules/extra/m_pgsql.cpp1
-rw-r--r--src/timer.cpp5
3 files changed, 8 insertions, 2 deletions
diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp
index 798cde9b0..46f5bd3b2 100644
--- a/src/inspsocket.cpp
+++ b/src/inspsocket.cpp
@@ -440,7 +440,10 @@ bool SocketTimeout::Tick(time_t)
ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "SocketTimeout::Tick");
if (ServerInstance->SE->GetRef(this->sfd) != this->sock)
+ {
+ delete this;
return false;
+ }
if (this->sock->state == I_CONNECTING)
{
@@ -456,6 +459,7 @@ bool SocketTimeout::Tick(time_t)
}
this->sock->Timeout = NULL;
+ delete this;
return false;
}
diff --git a/src/modules/extra/m_pgsql.cpp b/src/modules/extra/m_pgsql.cpp
index 1ed5be6f0..b3b7d43df 100644
--- a/src/modules/extra/m_pgsql.cpp
+++ b/src/modules/extra/m_pgsql.cpp
@@ -593,6 +593,7 @@ bool ReconnectTimer::Tick(time_t time)
{
mod->retimer = NULL;
mod->ReadConf();
+ delete this;
return false;
}
diff --git a/src/timer.cpp b/src/timer.cpp
index f541c7eb1..b897056e6 100644
--- a/src/timer.cpp
+++ b/src/timer.cpp
@@ -47,8 +47,9 @@ void TimerManager::TickTimers(time_t TIME)
Timers.erase(i++);
if (!t->Tick(TIME))
- delete t;
- else if (t->GetRepeat())
+ continue;
+
+ if (t->GetRepeat())
{
t->SetTrigger(TIME + t->GetInterval());
AddTimer(t);