+void yf::Z3950Client::Rep::release_assoc(Package &package)
+{
+ boost::mutex::scoped_lock lock(m_mutex);
+ std::map<yp2::Session,yf::Z3950Client::Assoc *>::iterator it;
+
+ it = m_clients.find(package.session());
+ if (it != m_clients.end())
+ {
+ if (package.session().is_closed())
+ {
+ // the Z_Assoc and PDU_Assoc must be destroyed before
+ // the socket manager.. so pull that out.. first..
+ yazpp_1::SocketManager *s = it->second->m_socket_manager;
+ delete it->second; // destroy Z_Assoc
+ delete s; // then manager
+ m_clients.erase(it);
+ }
+ else
+ {
+ it->second->m_in_use = false;
+ }
+ m_cond_session_ready.notify_all();
+ }
+}
+