From 87d0fc8bb514ba727bbf4822fe21a8a70511987d Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 26 Dec 2010 20:15:54 -0500 Subject: [PATCH 1/6] Fixed poll engine to not reorder sockets if we remove the last socket because there is no need --- modules/socketengines/m_socketengine_poll.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/socketengines/m_socketengine_poll.cpp b/modules/socketengines/m_socketengine_poll.cpp index 044a79c4f..7a252f1f0 100644 --- a/modules/socketengines/m_socketengine_poll.cpp +++ b/modules/socketengines/m_socketengine_poll.cpp @@ -72,7 +72,7 @@ class SocketEnginePoll : public SocketEngineBase return; } - if (pos->second != SocketCount) + if (pos->second != SocketCount - 1) { pollfd *ev = &this->events[pos->second], *last_ev = &this->events[SocketCount - 1]; From fce491e18c654c84f7d379beb202faa28f3b2b64 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 27 Dec 2010 00:41:04 -0500 Subject: [PATCH 2/6] Made socket engine stop processing once all sockets have been checked --- modules/socketengines/m_socketengine_poll.cpp | 6 +++++- modules/socketengines/m_socketengine_select.cpp | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/socketengines/m_socketengine_poll.cpp b/modules/socketengines/m_socketengine_poll.cpp index 7a252f1f0..5b44f8674 100644 --- a/modules/socketengines/m_socketengine_poll.cpp +++ b/modules/socketengines/m_socketengine_poll.cpp @@ -137,9 +137,13 @@ class SocketEnginePoll : public SocketEngineBase return; } - for (int i = 0; i < total; ++i) + for (int i = 0, processed = 0; i < SocketCount && processed != total; ++i) { pollfd *ev = &this->events[i]; + + if (ev->revents != 0) + ++processed; + Socket *s = Sockets[ev->fd]; if (s->HasFlag(SF_DEAD)) diff --git a/modules/socketengines/m_socketengine_select.cpp b/modules/socketengines/m_socketengine_select.cpp index b1c1c065f..3ea9eab27 100644 --- a/modules/socketengines/m_socketengine_select.cpp +++ b/modules/socketengines/m_socketengine_select.cpp @@ -73,10 +73,13 @@ class SocketEngineSelect : public SocketEngineBase } else if (sresult) { - for (std::map::const_iterator it = Sockets.begin(), it_end = Sockets.end(); it != it_end; ++it) + int processed = 0; + for (std::map::const_iterator it = Sockets.begin(), it_end = Sockets.end(); it != it_end && processed != sresult; ++it) { Socket *s = it->second; + if (FD_ISSET(s->GetFD(), &efdset) || FD_ISSET(s->GetFD(), &rfdset) || FD_ISSET(s->GetFD(), &wfdset)) + ++processed; if (s->HasFlag(SF_DEAD)) continue; if (FD_ISSET(s->GetFD(), &efdset)) From 49dd1c34096623e916f6e5aba44f7036738c3344 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 27 Dec 2010 00:42:38 -0500 Subject: [PATCH 3/6] Bug #1220 - Fixed an event in /hs activate and /ms del --- modules/extra/db_mysql.cpp | 2 +- modules/extra/hs_request.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/extra/db_mysql.cpp b/modules/extra/db_mysql.cpp index 3cc0ceacb..6f2fcd832 100644 --- a/modules/extra/db_mysql.cpp +++ b/modules/extra/db_mysql.cpp @@ -1371,7 +1371,7 @@ class DBMySQL : public Module this->Escape(m->sender) + "', '" + this->Escape(m->text) + "', 'CHAN')"); } - void OnMemoDel(NickCore *nc, MemoInfo *mi, Memo *m) + void OnMemoDel(const NickCore *nc, MemoInfo *mi, Memo *m) { if (m) this->RunQuery("DELETE FROM `anope_ms_info` WHERE `receiver` = '" + this->Escape(nc->display) + "' AND `time` = " + stringify(m->time)); diff --git a/modules/extra/hs_request.cpp b/modules/extra/hs_request.cpp index fbba8bb02..c3661f2fd 100644 --- a/modules/extra/hs_request.cpp +++ b/modules/extra/hs_request.cpp @@ -153,6 +153,7 @@ class CommandHSActivate : public Command if (it != Requests.end()) { na->hostinfo.SetVhost(it->second->ident, it->second->host, u->nick, it->second->time); + FOREACH_MOD(I_OnSetVhost, OnSetVhost(na)); if (HSRequestMemoUser) memo_send(source, na->nick, _("[auto memo] Your requested vHost has been approved."), 2); From d896bf9a1cb1d875fa6930380fc001c76fc44b48 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 27 Dec 2010 01:00:12 -0500 Subject: [PATCH 4/6] Bug #1222 - Fixed crash from reading to read a range of memos --- modules/core/ms_read.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/core/ms_read.cpp b/modules/core/ms_read.cpp index 31f701c7e..db26fd689 100644 --- a/modules/core/ms_read.cpp +++ b/modules/core/ms_read.cpp @@ -49,7 +49,7 @@ class MemoListCallback : public NumberList class CommandMSRead : public Command { public: - CommandMSRead() : Command("READ", 0, 2) + CommandMSRead() : Command("READ", 1, 2) { } @@ -59,8 +59,7 @@ class CommandMSRead : public Command MemoInfo *mi; ChannelInfo *ci = NULL; - Anope::string numstr = !params.empty() ? params[0] : "", chan; - int num; + Anope::string numstr = params[0], chan; if (!numstr.empty() && numstr[0] == '#') { @@ -81,8 +80,8 @@ class CommandMSRead : public Command } else mi = &u->Account()->memos; - num = !numstr.empty() && numstr.is_number_only() ? convertTo(numstr) : -1; - if (numstr.empty() || (!numstr.equals_ci("LAST") && !numstr.equals_ci("NEW") && num <= 0)) + + if (numstr.empty() || (!numstr.equals_ci("LAST") && !numstr.equals_ci("NEW") && !numstr.is_number_only())) this->OnSyntaxError(source, numstr); else if (mi->memos.empty()) { @@ -91,7 +90,8 @@ class CommandMSRead : public Command else source.Reply(MEMO_HAVE_NO_MEMOS); } - else { + else + { int i, end; if (numstr.equals_ci("NEW")) From a1c635b050534280c87145d8ebcc61b296d54afe Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 27 Dec 2010 01:35:08 -0500 Subject: [PATCH 5/6] Load session exceptions on start when using SQL --- modules/extra/db_mysql.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/modules/extra/db_mysql.cpp b/modules/extra/db_mysql.cpp index 6f2fcd832..d11d7b914 100644 --- a/modules/extra/db_mysql.cpp +++ b/modules/extra/db_mysql.cpp @@ -906,6 +906,18 @@ class DBMySQL : public Module } } + r = SQL->RunQuery("SELECT * FROM `anope_os_exceptions`"); + for (int i = 0; i < r.Rows(); ++i) + { + Anope::string mask = r.Get(i, "mask"); + unsigned limit = convertTo(r.Get(i, "slimit")); + Anope::string creator = r.Get(i, "who"); + Anope::string reason = r.Get(i, "reason"); + time_t expires = convertTo(r.Get(i, "expires")); + + exception_add(NULL, mask, limit, reason, creator, expires); + } + r = SQL->RunQuery("SELECT * FROM `anope_extra`"); for (int i = 0; i < r.Rows(); ++i) { From 5ead326454ccc369f8b3b4ef91971b45e7e01072 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 27 Dec 2010 15:31:34 -0500 Subject: [PATCH 6/6] Fixed build on debian lenny --- src/base.cpp | 2 +- src/hashcomp.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/base.cpp b/src/base.cpp index 6977f81c5..d0eff0beb 100644 --- a/src/base.cpp +++ b/src/base.cpp @@ -1,4 +1,4 @@ -#include "anope.h" +#include "services.h" Base::Base() { diff --git a/src/hashcomp.cpp b/src/hashcomp.cpp index d50fca3c0..a7bca3060 100644 --- a/src/hashcomp.cpp +++ b/src/hashcomp.cpp @@ -8,7 +8,7 @@ * for use in Anope. */ -#include "anope.h" +#include "services.h" /* *