X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Fyaz-proxy.cpp;h=ea0e19784569f8c07076f13b081fb08f2e59a0f3;hb=235723d298568379d3a4cb36733f104f80e01655;hp=14c2f5ec6150b3170b8182a0842d74a14537dea1;hpb=d23c53d4b4493f88a73a11d166e2a1a1d0aa2dd5;p=yazproxy-moved-to-github.git diff --git a/src/yaz-proxy.cpp b/src/yaz-proxy.cpp index 14c2f5e..ea0e197 100644 --- a/src/yaz-proxy.cpp +++ b/src/yaz-proxy.cpp @@ -1,4 +1,4 @@ -/* $Id: yaz-proxy.cpp,v 1.57 2006-04-13 00:43:56 adam Exp $ +/* $Id: yaz-proxy.cpp,v 1.59 2006-04-16 07:35:06 adam Exp $ Copyright (c) 1998-2006, Index Data. This file is part of the yazproxy. @@ -438,6 +438,7 @@ IPDU_Observer *Yaz_Proxy::sessionNotify(IPDU_Observable else sprintf(session_str, "%ld:%d %d ", (long) time(0), m_session_no, 0); + m_session_no++; yaz_log (YLOG_LOG, "%sNew session %s", session_str, peername); @@ -1981,7 +1982,10 @@ void Yaz_Proxy::recv_GDU_more(bool normal) while (m_timeout_mode == timeout_normal && (g = m_in_queue.dequeue())) { m_timeout_mode = timeout_busy; + inc_ref(); recv_GDU_reduce(g); + if (dec_ref(false)) + break; } } @@ -3086,6 +3090,23 @@ void Yaz_Proxy::handle_init(Z_APDU *apdu) void Yaz_Proxy::handle_incoming_Z_PDU(Z_APDU *apdu) { +#if 0 + // try to make a _bad_ attribute set ID .. Don't enable this in prod. + if (apdu->which == Z_APDU_searchRequest) + { + Z_SearchRequest *req = apdu->u.searchRequest; + if (req->query && req->query->which == Z_Query_type_1) + { + Z_RPNQuery *rpnquery = req->query->u.type_1; + if (rpnquery->attributeSetId) + { + rpnquery->attributeSetId[0] = -2; + rpnquery->attributeSetId[1] = -1; + yaz_log(YLOG_WARN, "%sBAD FIXUP TEST", m_session_str); + } + } + } +#endif Z_ReferenceId **refid = get_referenceIdP(apdu); nmem_reset(m_referenceId_mem); if (refid && *refid) @@ -3241,6 +3262,7 @@ void Yaz_Proxy::releaseClient() bool Yaz_Proxy::dec_ref(bool main_ptr) { + main_ptr = false; assert(m_ref_count > 0); if (main_ptr) { @@ -3275,7 +3297,7 @@ void Yaz_ProxyClient::shutdown() if (m_server) { - m_waiting = 1; // ensure it's released from Proxy in releaseClient + m_waiting = 1; // ensure it's released from Yaz_Proxy::releaseClient m_server->dec_ref(true); } else @@ -3285,8 +3307,7 @@ void Yaz_ProxyClient::shutdown() void Yaz_Proxy::failNotify() { inc_request_no(); - yaz_log (YLOG_LOG, "%sConnection closed by client", - get_session_str()); + yaz_log (YLOG_LOG, "%sConnection closed by client", get_session_str()); dec_ref(true); }