int m_queue_len;
int m_time_elapsed;
int m_time_max;
+ int m_time_connect_max;
std::string m_host;
};
m_socket_manager(socket_manager), m_PDU_Observable(PDU_Observable),
m_package(0), m_in_use(true), m_waiting(false),
m_destroyed(false), m_connected(false), m_queue_len(1),
- m_time_elapsed(0), m_time_max(timeout_sec),
+ m_time_elapsed(0), m_time_max(timeout_sec), m_time_connect_max(10),
m_host(host)
{
// std::cout << "create assoc " << this << "\n";
void yf::Z3950Client::Assoc::timeoutNotify()
{
m_time_elapsed++;
- if (m_time_elapsed >= m_time_max)
+ if ((m_connected && m_time_elapsed >= m_time_max)
+ || (!m_connected && m_time_elapsed >= m_time_connect_max))
{
m_waiting = false;
{
// destroy hint (send_and_receive)
it->second->m_destroyed = true;
-
- // wait until no one is waiting for it.
- while (it->second->m_queue_len)
- m_cond_session_ready.wait(lock);
-
- // 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);
+ if (it->second->m_queue_len == 0)
+ {
+ yazpp_1::SocketManager *s = it->second->m_socket_manager;
+ delete it->second; // destroy Z_Assoc
+ delete s; // then manager
+ m_clients.erase(it);
+ }
}
- yaz_log(YLOG_LOG, "Notify all release_assoc");
m_cond_session_ready.notify_all();
}
}
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
- * c-file-style: "stroustrup"
* End:
* vim: shiftwidth=4 tabstop=8 expandtab
*/
+