zoom: check for valid proxy from Torus too
[metaproxy-moved-to-github.git] / src / filter_frontend_net.cpp
index a3ab5f7..21f8e8b 100644 (file)
@@ -103,7 +103,7 @@ namespace metaproxy_1 {
         ~ThreadPoolPackage();
         IThreadPoolMsg *handle();
         void result(const char *t_info);
-        
+        bool cleanup(void *info);
     private:
         yaz_timing_t timer;
         mp::ZAssocChild *m_assoc_child;
@@ -126,7 +126,7 @@ namespace metaproxy_1 {
         
         void failNotify();
         void timeoutNotify();
-    void connectNotify();
+        void connectNotify();
     private:
         mp::ThreadPoolSocketObserver *m_thread_pool_observer;
         const mp::Package *m_package;
@@ -155,6 +155,13 @@ mp::ThreadPoolPackage::~ThreadPoolPackage()
     delete m_package;
 }
 
+bool mp::ThreadPoolPackage::cleanup(void *info)
+{
+    mp::Session *ses = (mp::Session *) info;
+
+    return *ses == m_package->session();
+}
+
 void mp::ThreadPoolPackage::result(const char *t_info)
 {
     m_assoc_child->m_no_requests--;
@@ -284,7 +291,8 @@ void mp::ZAssocChild::failNotify()
     mp::ThreadPoolPackage *tp = new mp::ThreadPoolPackage(p, this,
                                                           m_msg_config);
     p->copy_route(*m_package);
-    m_thread_pool_observer->put(tp);  
+    m_thread_pool_observer->cleanup(tp, &m_session);
+    m_thread_pool_observer->put(tp);
 }
 
 void mp::ZAssocChild::timeoutNotify()
@@ -375,6 +383,17 @@ mp::filter::FrontendNet::~FrontendNet()
             delete m_p->az[i];
         delete [] m_p->az;
     }
+    m_p->az = 0;
+}
+
+void mp::filter::FrontendNet::stop() const
+{
+    if (m_p->az)
+    {
+        size_t i;
+        for (i = 0; i<m_p->m_ports.size(); i++)
+            m_p->az[i]->server("");
+    }
 }
 
 bool mp::My_Timer_Thread::timeout()
@@ -417,6 +436,9 @@ void mp::filter::FrontendNet::process(Package &package) const
     }
     while (m_p->mySocketManager.processEvent() > 0)
     {
+        int no = m_p->mySocketManager.getNumberOfObservers();
+        if (no <= 1)
+            break;
        if (tt && tt->timeout())
            break;
     }