diff -I '\$Id: ' -u -r -b -w -p -d --new-file --exclude-from=/Users/rstory/.rcfiles/diff-ignore SVN/include/net-snmp/agent/cache_handler.h APPLE/include/net-snmp/agent/cache_handler.h --- SVN/include/net-snmp/agent/cache_handler.h +++ APPLE/include/net-snmp/agent/cache_handler.h @@ -85,6 +85,8 @@ extern "C" { netsnmp_cache_create(int timeout, NetsnmpCacheLoad * load_hook, NetsnmpCacheFree * free_hook, oid * rootoid, int rootoid_len); + int netsnmp_cache_free(netsnmp_cache *cache); + netsnmp_mib_handler * netsnmp_cache_handler_get(netsnmp_cache* cache); diff -I '\$Id: ' -u -r -b -w -p -d --new-file --exclude-from=/Users/rstory/.rcfiles/diff-ignore SVN/agent/helpers/cache_handler.c APPLE/agent/helpers/cache_handler.c --- SVN/agent/helpers/cache_handler.c +++ APPLE/agent/helpers/cache_handler.c @@ -173,6 +173,31 @@ netsnmp_cache_create(int timeout, Netsnm return cache; } +/** frees a cache + */ +int +netsnmp_cache_free(netsnmp_cache *cache) +{ + netsnmp_cache *pos; + + if (NULL == cache) + return SNMPERR_SUCCESS; + + for (pos = cache_head; pos; pos = pos->next) { + if (pos == cache) { + snmp_log(LOG_WARNING, "not freeing cache (still in list)\n"); + return SNMP_ERR_GENERR; + } + } + + if (cache->rootoid) + free(cache->rootoid); + + free(cache); + + return SNMPERR_SUCCESS; +} + /** callback function to call cache load function */ static void _timer_reload(unsigned int regNo, void *clientargs)