move mysql init to createSession() and protect it with mutex

This commit is contained in:
Alex Fabijanic
2017-06-22 22:42:21 +02:00
parent 2fd58d54bc
commit 8aecf8a9b0
4 changed files with 245 additions and 226 deletions

View File

@@ -30,6 +30,7 @@ namespace MySQL {
std::string Connector::KEY(POCO_DATA_MYSQL_CONNECTOR_NAME);
Poco::Mutex Connector::_mutex;
Connector::Connector()
@@ -50,17 +51,25 @@ const std::string& Connector::name() const
Poco::AutoPtr<Poco::Data::SessionImpl> Connector::createSession(const std::string& connectionString,
std::size_t timeout)
{
static bool initDone = false;
{
Poco::Mutex::ScopedLock l(_mutex);
if (!initDone)
{
if (mysql_library_init(0, 0, 0) != 0)
{
throw Exception("mysql_library_init error");
}
initDone = true;
}
}
return Poco::AutoPtr<Poco::Data::SessionImpl>(new SessionImpl(connectionString, timeout));
}
void Connector::registerConnector()
{
if (mysql_library_init(0, 0, 0) != 0)
{
throw Exception("mysql_library_init error");
}
Poco::Data::SessionFactory::instance().add(new Connector());
}