michael@384: diff Nau agent/snmp_agent.c.orig agent/snmp_agent.c michael@384: Index: agent/snmp_agent.c michael@384: --- agent/snmp_agent.c.orig michael@384: +++ agent/snmp_agent.c michael@384: @@ -1535,38 +1535,42 @@ int michael@384: netsnmp_remove_delegated_requests_for_session(netsnmp_session *sess) michael@384: { michael@384: netsnmp_agent_session *asp; michael@384: - int count = 0; michael@384: - michael@384: - for (asp = agent_delegated_list; asp; asp = asp->next) { michael@384: - /* michael@384: - * check each request michael@384: - */ michael@384: - netsnmp_request_info *request; michael@384: - for(request = asp->requests; request; request = request->next) { michael@384: - /* michael@384: - * check session michael@384: - */ michael@384: - netsnmp_assert(NULL!=request->subtree); michael@384: - if(request->subtree->session != sess) michael@384: - continue; michael@384: + int count; michael@384: michael@384: + do { michael@384: + count = 0; michael@384: + for (asp = agent_delegated_list; asp; asp = asp->next) { michael@384: /* michael@384: - * matched! mark request as done michael@384: + * check each request michael@384: */ michael@384: - netsnmp_request_set_error(request, SNMP_ERR_GENERR); michael@384: - ++count; michael@384: + netsnmp_request_info *request; michael@384: + for(request = asp->requests; request; request = request->next) { michael@384: + /* michael@384: + * check session michael@384: + */ michael@384: + netsnmp_assert(NULL!=request->subtree); michael@384: + if(request->subtree->session != sess) michael@384: + continue; michael@384: + michael@384: + /* michael@384: + * matched! mark request as done michael@384: + */ michael@384: + netsnmp_request_set_error(request, SNMP_ERR_GENERR); michael@384: + ++count; michael@384: + } michael@384: } michael@384: - } michael@384: michael@384: - /* michael@384: - * if we found any, that request may be finished now michael@384: - */ michael@384: - if(count) { michael@384: - DEBUGMSGTL(("snmp_agent", "removed %d delegated request(s) for session " michael@384: - "%8p\n", count, sess)); michael@384: - netsnmp_check_outstanding_agent_requests(); michael@384: - } michael@384: - michael@384: + /* michael@384: + * if we found any, that request may be finished now michael@384: + */ michael@384: + if(count) { michael@384: + DEBUGMSGTL(("snmp_agent", "removed %d delegated request(s) for session " michael@384: + "%8p\n", count, sess)); michael@384: + netsnmp_check_outstanding_agent_requests(); michael@384: + /* the request may get delegated if it was GETNEXT, retry the loop */ michael@384: + } michael@384: + } while (count); michael@384: + michael@384: return count; michael@384: } michael@384: