]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/configuration/sgconfig/configproto.cpp
Add an option to opt-out Firebird store.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig / configproto.cpp
index f012fa1a7e6c1a192ddc5b8beb6691f7c62a117b..5c176f4568fd6fc5cb76f04dd2518b43d598390f 100644 (file)
@@ -50,7 +50,7 @@
 
 namespace SP = STG::PARSER;
 
 
 namespace SP = STG::PARSER;
 
-CONFIGPROTO::CONFIGPROTO(PLUGIN_LOGGER & l)
+CONFIGPROTO::CONFIGPROTO(STG::PluginLogger & l)
     : m_settings(NULL),
       m_admins(NULL),
       m_tariffs(NULL),
     : m_settings(NULL),
       m_admins(NULL),
       m_tariffs(NULL),
@@ -60,7 +60,6 @@ CONFIGPROTO::CONFIGPROTO(PLUGIN_LOGGER & l)
       m_store(NULL),
       m_port(0),
       m_bindAddress("0.0.0.0"),
       m_store(NULL),
       m_port(0),
       m_bindAddress("0.0.0.0"),
-      m_running(false),
       m_stopped(true),
       m_logger(l),
       m_listenSocket(-1)
       m_stopped(true),
       m_logger(l),
       m_listenSocket(-1)
@@ -69,9 +68,16 @@ CONFIGPROTO::CONFIGPROTO(PLUGIN_LOGGER & l)
 
 CONFIGPROTO::~CONFIGPROTO()
 {
 
 CONFIGPROTO::~CONFIGPROTO()
 {
+    {
     std::deque<STG::Conn *>::iterator it;
     for (it = m_conns.begin(); it != m_conns.end(); ++it)
         delete *it;
     std::deque<STG::Conn *>::iterator it;
     for (it = m_conns.begin(); it != m_conns.end(); ++it)
         delete *it;
+    }
+    {
+    BASE_PARSER::REGISTRY::iterator it;
+    for (it = m_registry.begin(); it != m_registry.end(); ++it)
+        delete it->second;
+    }
 }
 
 int CONFIGPROTO::Prepare()
 }
 
 int CONFIGPROTO::Prepare()
@@ -83,7 +89,6 @@ int CONFIGPROTO::Prepare()
     sigaddset(&sigmask, SIGUSR1);
     sigaddset(&sigmask, SIGHUP);
     pthread_sigmask(SIG_BLOCK, &sigmask, &oldmask);
     sigaddset(&sigmask, SIGUSR1);
     sigaddset(&sigmask, SIGHUP);
     pthread_sigmask(SIG_BLOCK, &sigmask, &oldmask);
-
     m_listenSocket = socket(PF_INET, SOCK_STREAM, 0);
 
     if (m_listenSocket < 0)
     m_listenSocket = socket(PF_INET, SOCK_STREAM, 0);
 
     if (m_listenSocket < 0)
@@ -114,14 +119,12 @@ int CONFIGPROTO::Prepare()
 
     RegisterParsers();
 
 
     RegisterParsers();
 
-    m_running = true;
     m_stopped = false;
     return 0;
 }
 
 int CONFIGPROTO::Stop()
 {
     m_stopped = false;
     return 0;
 }
 
 int CONFIGPROTO::Stop()
 {
-    m_running = false;
     for (int i = 0; i < 5 && !m_stopped; ++i)
     {
         struct timespec ts = {0, 200000000};
     for (int i = 0; i < 5 && !m_stopped; ++i)
     {
         struct timespec ts = {0, 200000000};
@@ -140,9 +143,9 @@ int CONFIGPROTO::Stop()
     return 0;
 }
 
     return 0;
 }
 
-void CONFIGPROTO::Run()
+void CONFIGPROTO::Run(std::stop_token token)
 {
 {
-    while (m_running)
+    while (!token.stop_requested())
     {
         fd_set fds;
 
     {
         fd_set fds;
 
@@ -160,7 +163,7 @@ void CONFIGPROTO::Run()
             m_logger(m_errorStr);
             break;
         }
             m_logger(m_errorStr);
             break;
         }
-        if (!m_running)
+        if (token.stop_requested())
             break;
         if (res > 0)
             HandleEvents(fds);
             break;
         if (res > 0)
             HandleEvents(fds);