summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/botserv.cpp11
-rw-r--r--src/chanserv.cpp4
-rw-r--r--src/init.cpp6
-rw-r--r--src/nickserv.cpp8
-rw-r--r--src/regchannel.cpp2
-rw-r--r--src/socketengines/socketengine_eventfd.cpp7
-rw-r--r--src/threadengines/threadengine_pthread.cpp9
-rw-r--r--src/threadengines/threadengine_win32.cpp9
8 files changed, 46 insertions, 10 deletions
diff --git a/src/botserv.cpp b/src/botserv.cpp
index c96ccb536..23482f76c 100644
--- a/src/botserv.cpp
+++ b/src/botserv.cpp
@@ -359,10 +359,15 @@ void botchanmsgs(User *u, ChannelInfo *ci, const Anope::string &buf)
BotInfo *findbot(const Anope::string &nick)
{
+ BotInfo *bi;
if (isdigit(nick[0]) && ircd->ts6)
- return BotListByUID.find(nick);
-
- return BotListByNick.find(nick);
+ bi = BotListByUID.find(nick);
+ else
+ bi = BotListByNick.find(nick);
+
+ FOREACH_MOD(I_OnFindBot, OnFindBot(nick));
+
+ return bi;
}
/*************************************************************************/
diff --git a/src/chanserv.cpp b/src/chanserv.cpp
index b66a36dbe..ef203c064 100644
--- a/src/chanserv.cpp
+++ b/src/chanserv.cpp
@@ -471,10 +471,12 @@ void cs_remove_nick(NickCore *nc)
ChannelInfo *cs_findchan(const Anope::string &chan)
{
- registered_channel_map::const_iterator it = RegisteredChannelList.find(chan);
+ FOREACH_MOD(I_OnFindChan, OnFindChan(chan));
+ registered_channel_map::const_iterator it = RegisteredChannelList.find(chan);
if (it != RegisteredChannelList.end())
return it->second;
+
return NULL;
}
diff --git a/src/init.cpp b/src/init.cpp
index c12f600fc..fc53d6a2b 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -375,13 +375,13 @@ void Init(int ac, char **av)
/* Add Encryption Modules */
ModuleManager::LoadModuleList(Config->EncModuleList);
- /* Add Database Modules */
- ModuleManager::LoadModuleList(Config->DBModuleList);
-
/* Load the socket engine */
if (ModuleManager::LoadModule(Config->SocketEngine, NULL) || !SocketEngine)
throw FatalException("Unable to load socket engine " + Config->SocketEngine);
+ /* Add Database Modules */
+ ModuleManager::LoadModuleList(Config->DBModuleList);
+
try
{
DNSEngine = new DNSManager();
diff --git a/src/nickserv.cpp b/src/nickserv.cpp
index 65ffc02d1..f841ced10 100644
--- a/src/nickserv.cpp
+++ b/src/nickserv.cpp
@@ -319,10 +319,12 @@ NickRequest *findrequestnick(const Anope::string &nick)
NickAlias *findnick(const Anope::string &nick)
{
- nickalias_map::const_iterator it = NickAliasList.find(nick);
+ FOREACH_MOD(I_OnFindNick, OnFindNick(nick));
+ nickalias_map::const_iterator it = NickAliasList.find(nick);
if (it != NickAliasList.end())
return it->second;
+
return NULL;
}
@@ -330,10 +332,12 @@ NickAlias *findnick(const Anope::string &nick)
NickCore *findcore(const Anope::string &nick)
{
- nickcore_map::const_iterator it = NickCoreList.find(nick);
+ FOREACH_MOD(I_OnFindCore, OnFindCore(nick));
+ nickcore_map::const_iterator it = NickCoreList.find(nick);
if (it != NickCoreList.end())
return it->second;
+
return NULL;
}
diff --git a/src/regchannel.cpp b/src/regchannel.cpp
index 4ab4062aa..b240b8554 100644
--- a/src/regchannel.cpp
+++ b/src/regchannel.cpp
@@ -494,6 +494,8 @@ void ChannelInfo::ClearBadWords()
*/
void ChannelInfo::LoadMLock()
{
+ this->ClearMLock();
+
std::vector<Anope::string> modenames_on, modenames_off;
// Force +r
diff --git a/src/socketengines/socketengine_eventfd.cpp b/src/socketengines/socketengine_eventfd.cpp
index 4e4016326..9e9ec677b 100644
--- a/src/socketengines/socketengine_eventfd.cpp
+++ b/src/socketengines/socketengine_eventfd.cpp
@@ -53,7 +53,12 @@ bool Pipe::Read(const Anope::string &)
void Pipe::Notify()
{
- this->Write("*");
+ /* Note we send this immediatly. If use use Socket::Write and if this functions is called
+ * from a thread, only epoll is able to pick up the change to this sockets want flags immediately
+ * Other engines time out then pick up and write the change then read it back, which
+ * is too slow for most things.
+ */
+ this->IO->Send(this, "");
}
void Pipe::OnNotify()
diff --git a/src/threadengines/threadengine_pthread.cpp b/src/threadengines/threadengine_pthread.cpp
index 65d1533f3..acdccfeb5 100644
--- a/src/threadengines/threadengine_pthread.cpp
+++ b/src/threadengines/threadengine_pthread.cpp
@@ -79,6 +79,15 @@ void Mutex::Unlock()
pthread_mutex_unlock(&mutex);
}
+/** Attempt to lock the mutex, will return true on success and false on fail
+ * Does not block
+ * @return true or false
+ */
+bool Mutex::TryLock()
+{
+ return pthread_mutex_trylock(&mutex) == 0;
+}
+
/** Constructor
*/
Condition::Condition() : Mutex()
diff --git a/src/threadengines/threadengine_win32.cpp b/src/threadengines/threadengine_win32.cpp
index b270a895d..e6ad725bf 100644
--- a/src/threadengines/threadengine_win32.cpp
+++ b/src/threadengines/threadengine_win32.cpp
@@ -73,6 +73,15 @@ void Mutex::Unlock()
LeaveCriticalSection(&mutex);
}
+/** Attempt to lock the mutex, will return true on success and false on fail
+ * Does not block
+ * @return true or false
+ */
+bool Mutex::TryLock()
+{
+ return TryEnterCriticalSection(&mutex);
+}
+
/** Constructor
*/
Condition::Condition() : Mutex()