Commit 98cbc0ea authored by Max Kellermann's avatar Max Kellermann

event/TimeoutMonitor: eliminate support for periodic events

No caller needs this. Fixes use-after-free after returning from Client::OnTimeout().
parent dca11151
...@@ -30,7 +30,7 @@ Client::SetExpired() ...@@ -30,7 +30,7 @@ Client::SetExpired()
TimeoutMonitor::Schedule(0); TimeoutMonitor::Schedule(0);
} }
bool void
Client::OnTimeout() Client::OnTimeout()
{ {
if (!IsExpired()) { if (!IsExpired()) {
...@@ -39,5 +39,4 @@ Client::OnTimeout() ...@@ -39,5 +39,4 @@ Client::OnTimeout()
} }
Close(); Close();
return false;
} }
...@@ -120,7 +120,7 @@ private: ...@@ -120,7 +120,7 @@ private:
virtual void OnSocketClosed() override; virtual void OnSocketClosed() override;
/* virtual methods from class TimeoutMonitor */ /* virtual methods from class TimeoutMonitor */
virtual bool OnTimeout() override; virtual void OnTimeout() override;
}; };
extern int client_timeout; extern int client_timeout;
......
...@@ -38,7 +38,7 @@ enum { ...@@ -38,7 +38,7 @@ enum {
INOTIFY_UPDATE_DELAY_S = 5, INOTIFY_UPDATE_DELAY_S = 5,
}; };
bool void
InotifyQueue::OnTimeout() InotifyQueue::OnTimeout()
{ {
unsigned id; unsigned id;
...@@ -47,17 +47,16 @@ InotifyQueue::OnTimeout() ...@@ -47,17 +47,16 @@ InotifyQueue::OnTimeout()
const char *uri_utf8 = queue.front().c_str(); const char *uri_utf8 = queue.front().c_str();
id = update_enqueue(uri_utf8, false); id = update_enqueue(uri_utf8, false);
if (id == 0) if (id == 0) {
/* retry later */ /* retry later */
return true; ScheduleSeconds(INOTIFY_UPDATE_DELAY_S);
return;
}
g_debug("updating '%s' job=%u", uri_utf8, id); g_debug("updating '%s' job=%u", uri_utf8, id);
queue.pop_front(); queue.pop_front();
} }
/* done, remove the timer event by returning false */
return false;
} }
static bool static bool
......
...@@ -35,7 +35,7 @@ public: ...@@ -35,7 +35,7 @@ public:
void Enqueue(const char *uri_utf8); void Enqueue(const char *uri_utf8);
private: private:
virtual bool OnTimeout() override; virtual void OnTimeout() override;
}; };
#endif #endif
...@@ -116,9 +116,8 @@ StateFile::CheckModified() ...@@ -116,9 +116,8 @@ StateFile::CheckModified()
ScheduleSeconds(2 * 60); ScheduleSeconds(2 * 60);
} }
bool void
StateFile::OnTimeout() StateFile::OnTimeout()
{ {
Write(); Write();
return false;
} }
...@@ -67,7 +67,7 @@ private: ...@@ -67,7 +67,7 @@ private:
bool IsModified() const; bool IsModified() const;
/* virtual methods from TimeoutMonitor */ /* virtual methods from TimeoutMonitor */
virtual bool OnTimeout() override; virtual void OnTimeout() override;
}; };
#endif /* STATE_FILE_H */ #endif /* STATE_FILE_H */
...@@ -45,21 +45,17 @@ TimeoutMonitor::ScheduleSeconds(unsigned s) ...@@ -45,21 +45,17 @@ TimeoutMonitor::ScheduleSeconds(unsigned s)
source = loop.AddTimeoutSeconds(s, Callback, this); source = loop.AddTimeoutSeconds(s, Callback, this);
} }
bool void
TimeoutMonitor::Run() TimeoutMonitor::Run()
{ {
bool result = OnTimeout(); Cancel();
if (!result && source != nullptr) { OnTimeout();
g_source_unref(source);
source = nullptr;
}
return result;
} }
gboolean gboolean
TimeoutMonitor::Callback(gpointer data) TimeoutMonitor::Callback(gpointer data)
{ {
TimeoutMonitor &monitor = *(TimeoutMonitor *)data; TimeoutMonitor &monitor = *(TimeoutMonitor *)data;
return monitor.Run(); monitor.Run();
return false;
} }
...@@ -47,13 +47,10 @@ public: ...@@ -47,13 +47,10 @@ public:
void Cancel(); void Cancel();
protected: protected:
/** virtual void OnTimeout() = 0;
* @return true reschedules the timeout again
*/
virtual bool OnTimeout() = 0;
private: private:
bool Run(); void Run();
static gboolean Callback(gpointer data); static gboolean Callback(gpointer data);
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment