+void yf::Z3950Client::Pimpl::release_assoc(Package &package,
+ yf::Z3950Client::Assoc *c)
+{
+ if (package.session().is_closed())
+ {
+ boost::mutex::scoped_lock lock(m_mutex);
+ std::list<yf::Z3950Client::Assoc *>::iterator it;
+
+ for (it = m_clients.begin(); it != m_clients.end(); it++)
+ {
+ if ((*it)->m_session_id == package.session())
+ break;
+ }
+ if (it != m_clients.end())
+ {
+ // the Z_Assoc and PDU_Assoc must be destroyed before
+ // the socket manager.. so pull that out.. first..
+ yazpp_1::SocketManager *s = (*it)->m_socket_manager;
+ delete *it; // destroy Z_Assoc
+ delete s; // then manager
+ m_clients.erase(it);
+ }
+ }
+}
+