From 8df2013c1862615417b76b3c4cade0d190ceca66 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Mon, 19 Dec 2005 08:42:59 +0000 Subject: [PATCH] Close virtual targets properly when close package is received. --- src/filter_virt_db.cpp | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/filter_virt_db.cpp b/src/filter_virt_db.cpp index 663c1be..3dc1337 100644 --- a/src/filter_virt_db.cpp +++ b/src/filter_virt_db.cpp @@ -1,4 +1,4 @@ -/* $Id: filter_virt_db.cpp,v 1.14 2005-11-14 23:35:22 adam Exp $ +/* $Id: filter_virt_db.cpp,v 1.15 2005-12-19 08:42:59 adam Exp $ Copyright (c) 2005, Index Data. %LICENSE% @@ -119,6 +119,20 @@ void yf::Virt_db::Rep::release_session(Package &package) { boost::mutex::scoped_lock lock(m_sessions_mutex); + Ses_it it = m_sessions.find(package.session()); + + if (it != m_sessions.end()) + { + Sets_it sit = it->second.m_sets.begin(); + for (; sit != it->second.m_sets.end(); sit++) + { + sit->second.m_backend_session.close(); + Package close_package(sit->second.m_backend_session, package.origin()); + close_package.copy_filter(package); + + close_package.move(); + } + } m_sessions.erase(package.session()); } @@ -426,8 +440,10 @@ void yf::Virt_db::add_map_db2vhost(std::string db, std::string vhost) void yf::Virt_db::process(Package &package) const { Z_GDU *gdu = package.request().get(); - - if (!gdu || gdu->which != Z_GDU_Z3950) + + if (package.session().is_closed()) + m_p->release_session(package); + else if (!gdu || gdu->which != Z_GDU_Z3950) package.move(); else { @@ -445,6 +461,11 @@ void yf::Virt_db::process(Package &package) const { m_p->present(package, apdu, move_later); } + else if (apdu->which == Z_APDU_close) + { + package.session().close(); + m_p->release_session(package); + } else { yp2::odr odr; @@ -454,12 +475,11 @@ void yf::Virt_db::process(Package &package) const "unsupported APDU in filter_virt_db"); package.session().close(); + m_p->release_session(package); } if (move_later) package.move(); } - if (package.session().is_closed()) - m_p->release_session(package); } -- 1.7.10.4