summaryrefslogtreecommitdiff
path: root/modules/extra/m_mysql.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-10-01 21:01:49 -0400
committerAdam <Adam@anope.org>2010-10-01 21:01:49 -0400
commitd44f7971b129aa7ba80999f16f17b8c7499686e1 (patch)
treea86d08c3e641ed6b499b53b3bbb74e2a7f5b0dfb /modules/extra/m_mysql.cpp
parent70056dd4689eeab4f7a9b31a921e0d7e40d5ed0d (diff)
Rewrote some of the socket code to allow m_ssl to be a service.
This allows modules (xmlrpc) to create and accept SSL connections. Also fixed unloading m_mysql at certain times and made the threading engine always work correctly on Windows.
Diffstat (limited to 'modules/extra/m_mysql.cpp')
-rw-r--r--modules/extra/m_mysql.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/modules/extra/m_mysql.cpp b/modules/extra/m_mysql.cpp
index f641aa655..de855cead 100644
--- a/modules/extra/m_mysql.cpp
+++ b/modules/extra/m_mysql.cpp
@@ -186,6 +186,7 @@ class ModuleSQL : public Module
DThread->SetExitState();
DThread->Wakeup();
DThread->Join();
+ delete DThread;
delete SQLPipe;
}
@@ -234,6 +235,7 @@ class ModuleSQL : public Module
{
MySQLService *ss = new MySQLService(this, connname, database, server, user, password, port);
this->MySQLServices.insert(std::make_pair(connname, ss));
+ ModuleManager::RegisterService(ss);
Log(LOG_NORMAL, "mysql") << "MySQL: Sucessfully connected to server " << connname << " (" << server << ")";
}
@@ -284,13 +286,13 @@ MySQLService::~MySQLService()
for (unsigned i = me->QueryRequests.size(); i > 0; --i)
{
- QueryRequest &r = me->QueryRequests[i];
+ QueryRequest &r = me->QueryRequests[i - 1];
if (r.service == this)
{
if (r.interface)
r.interface->OnError(SQLResult("", "SQL Interface is going away"));
- me->QueryRequests.erase(me->QueryRequests.begin() + i);
+ me->QueryRequests.erase(me->QueryRequests.begin() + i - 1);
}
}
this->Lock.Unlock();
@@ -373,7 +375,7 @@ void DispatcherThread::Run()
r.service->Lock.Unlock();
this->Lock();
- if (me->QueryRequests.front().query == r.query)
+ if (!me->QueryRequests.empty() && me->QueryRequests.front().query == r.query)
{
if (r.interface)
me->FinishedRequests.push_back(QueryResult(r.interface, sresult));