+ if (!it->second->m_in_use)
+ {
+ it->second->m_in_use = true;
+ return it->second;
+ }
+ m_cond_session_ready.wait(lock);
+ }
+ FrontendPtr f(new Frontend(this));
+ m_clients[package.session()] = f;
+ f->m_in_use = true;
+ return f;
+}
+
+void yf::Virt_db::Rep::release_frontend(mp::Package &package)
+{
+ boost::mutex::scoped_lock lock(m_mutex);
+ std::map<mp::Session,yf::Virt_db::FrontendPtr>::iterator it;
+
+ it = m_clients.find(package.session());
+ if (it != m_clients.end())
+ {
+ if (package.session().is_closed())
+ {
+ it->second->close(package);
+ m_clients.erase(it);
+ }
+ else
+ {
+ it->second->m_in_use = false;
+ }
+ m_cond_session_ready.notify_all();
+ }
+}
+
+yf::Virt_db::Set::Set(BackendPtr b, std::string setname)
+ : m_backend(b), m_setname(setname)
+{
+}
+
+
+yf::Virt_db::Set::Set()
+{
+}
+
+
+yf::Virt_db::Set::~Set()
+{
+}
+
+yf::Virt_db::Map::Map(std::list<std::string> targets, std::string route)
+ : m_targets(targets), m_route(route)
+{
+}
+
+yf::Virt_db::Map::Map()
+{
+}
+
+yf::Virt_db::Virt_db() : m_p(new Virt_db::Rep)
+{
+}
+
+yf::Virt_db::~Virt_db() {
+}
+
+
+void yf::Virt_db::Frontend::fixup_npr(Z_Records *records, std::string database,
+ ODR odr)
+{
+ if (records && records->which == Z_Records_DBOSD)
+ {
+ Z_NamePlusRecordList *nprlist = records->u.databaseOrSurDiagnostics;