| |
1 diff Nau agent/snmp_agent.c.orig agent/snmp_agent.c |
| |
2 Index: agent/snmp_agent.c |
| |
3 --- agent/snmp_agent.c.orig |
| |
4 +++ agent/snmp_agent.c |
| |
5 @@ -1535,38 +1535,42 @@ int |
| |
6 netsnmp_remove_delegated_requests_for_session(netsnmp_session *sess) |
| |
7 { |
| |
8 netsnmp_agent_session *asp; |
| |
9 - int count = 0; |
| |
10 - |
| |
11 - for (asp = agent_delegated_list; asp; asp = asp->next) { |
| |
12 - /* |
| |
13 - * check each request |
| |
14 - */ |
| |
15 - netsnmp_request_info *request; |
| |
16 - for(request = asp->requests; request; request = request->next) { |
| |
17 - /* |
| |
18 - * check session |
| |
19 - */ |
| |
20 - netsnmp_assert(NULL!=request->subtree); |
| |
21 - if(request->subtree->session != sess) |
| |
22 - continue; |
| |
23 + int count; |
| |
24 |
| |
25 + do { |
| |
26 + count = 0; |
| |
27 + for (asp = agent_delegated_list; asp; asp = asp->next) { |
| |
28 /* |
| |
29 - * matched! mark request as done |
| |
30 + * check each request |
| |
31 */ |
| |
32 - netsnmp_request_set_error(request, SNMP_ERR_GENERR); |
| |
33 - ++count; |
| |
34 + netsnmp_request_info *request; |
| |
35 + for(request = asp->requests; request; request = request->next) { |
| |
36 + /* |
| |
37 + * check session |
| |
38 + */ |
| |
39 + netsnmp_assert(NULL!=request->subtree); |
| |
40 + if(request->subtree->session != sess) |
| |
41 + continue; |
| |
42 + |
| |
43 + /* |
| |
44 + * matched! mark request as done |
| |
45 + */ |
| |
46 + netsnmp_request_set_error(request, SNMP_ERR_GENERR); |
| |
47 + ++count; |
| |
48 + } |
| |
49 } |
| |
50 - } |
| |
51 |
| |
52 - /* |
| |
53 - * if we found any, that request may be finished now |
| |
54 - */ |
| |
55 - if(count) { |
| |
56 - DEBUGMSGTL(("snmp_agent", "removed %d delegated request(s) for session " |
| |
57 - "%8p\n", count, sess)); |
| |
58 - netsnmp_check_outstanding_agent_requests(); |
| |
59 - } |
| |
60 - |
| |
61 + /* |
| |
62 + * if we found any, that request may be finished now |
| |
63 + */ |
| |
64 + if(count) { |
| |
65 + DEBUGMSGTL(("snmp_agent", "removed %d delegated request(s) for session " |
| |
66 + "%8p\n", count, sess)); |
| |
67 + netsnmp_check_outstanding_agent_requests(); |
| |
68 + /* the request may get delegated if it was GETNEXT, retry the loop */ |
| |
69 + } |
| |
70 + } while (count); |
| |
71 + |
| |
72 return count; |
| |
73 } |
| |
74 |