diff options
author | Adam <Adam@anope.org> | 2010-10-01 21:01:49 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2010-10-01 21:01:49 -0400 |
commit | d44f7971b129aa7ba80999f16f17b8c7499686e1 (patch) | |
tree | a86d08c3e641ed6b499b53b3bbb74e2a7f5b0dfb /modules/extra/m_mysql.cpp | |
parent | 70056dd4689eeab4f7a9b31a921e0d7e40d5ed0d (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.cpp | 8 |
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)); |