diff options
author | Stef Walter <stef@memberwebs.com> | 2007-06-12 01:44:17 +0000 |
---|---|---|
committer | Stef Walter <stef@memberwebs.com> | 2007-06-12 01:44:17 +0000 |
commit | 34d76738bd21314c56c314fe7c8cebc77b5959dc (patch) | |
tree | 38d63a07a81df314ce76c4e1c182b6b8d8f95905 /daemon | |
parent | c4a0c63f0dd25390d765b5fc52a7e91743641adf (diff) |
Fix assertion when reallocating for more requests. See #211
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/snmp-engine.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/daemon/snmp-engine.c b/daemon/snmp-engine.c index 8cae2b7..e79c6c2 100644 --- a/daemon/snmp-engine.c +++ b/daemon/snmp-engine.c @@ -94,6 +94,7 @@ static uint nrequests = 0; static rb_request* new_req() { + rb_request* arequests; rb_request* req = NULL; uint num; int i, overlap = 0; @@ -101,8 +102,7 @@ new_req() if(nrequests) { /* We allocate in a loop starting after the last allocation. */ - for(i = (reqhigh + 1) % nrequests; i != reqhigh; - i = (i + 1) % nrequests) + for(i = reqhigh; !overlap || i != reqhigh; i = (i + 1) % nrequests) { /* * We can overlap past reqlow, but in that case no @@ -134,8 +134,8 @@ new_req() /* Reallocate the request block */ /* TODO: Once we use less memory this can be higher */ num = nrequests ? nrequests * 2 : 32; - requests = (rb_request*)realloc(requests, sizeof(rb_request) * num); - if(!requests) + arequests = (rb_request*)realloc(requests, sizeof(rb_request) * num); + if(!arequests) { /* Note we leave old requests allocated */ errno = ENOMEM; @@ -143,6 +143,7 @@ new_req() } /* Clear out the new ones */ + requests = arequests; memset(requests + nrequests, 0, sizeof(rb_request) * (num - nrequests)); /* We return the next one */ |