I think there is a potential resurce leak in CONTAINER_INSERT that
require a change to the external interface to fix.
Assume a continer with multiple indices.
Assume that all index insert functions returns non-zero, then
CONTAINER_INSERT returns the same non-zero value as the last index
inserter.
Now, assume that only the last index insert function returns non-zero,
then CONTAINER_INSERT will return the same non-zero value as the last
index inserter.
How should a developer know if there are any live references to the
value left when CONTAINER_INSERT returns non-zero?
What does the term 'successful insertion' mean?
I believe that the only reasonable definition of 'successful insertion'
is that all needed insertions succeded, and thus the code for
CONTAINER_INSERT would have to be able to rollback the insertions that
already are done in case of trouble.
But then the problem is that CONTAINER_INSERT must remember the
containers where insertions are done as the result of insert_filter
might change as a result of the insertion and k might be in some index
even if it wasn't inserted by this run.
As a result of those requirements I end up in the following:
int CONTAINER_INSERT_HELPER(netsnmp_container* x, const void* k)
{
while(x && x->insert_filter(x,k) == 1)
x = x->next;
if(x) {
int rc = x->insert(x,k);
if(rc)
snmp_log(LOG_ERR,"error on subcontainer '%s' insert (%d)\n",
x->container_name ? x->container_name : "", rc);
else {
rc = CONTAINER_INSERT_HELPER(x->next, k);
if(rc)
x->remove(x,k);
}
return rc;
}
return 0;
}
int CONTAINER_INSERT(netsnmp_container* x, const void* k)
{
if(x == NULL)
return -1;
while(x->prev)
x = x->prev;
return CONTAINER_INSERT_HELPER(x, k);
}
Does anyone have comments to this?
/MF
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Net-snmp-coders mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders