On Fri, Apr 15, 2011 at 5:41 PM, Daniel Ng <[email protected]> wrote:
> Can someone please suggest an alternate fix? Tested on v5.6 and v5.6.1.
Here's a patch for v5.6. It implements what I described in my original post
"Leaking memory and File Handles for every HUP". It stops the leaking of
file handles, but there is still a memory leak (about 500 bytes per HUP are
leaked). The memory leak was always present- it was uncovered by the patch,
not introduced by it.
The crash was worked around by commenting out a free() in snmp_transport.c.
Not ideal, but if you have any better suggestions I'd love to know!
A little feedback would be greatly appreciated!! It's been rather quiet
around here...
--- netsnmp/agent/mibgroup/target/snmpTargetAddrEntry.c 2010-06-13
07:33:30.000000000 +1000
+++ netsnmp/agent/mibgroup/target/snmpTargetAddrEntry.c 2011-04-20
10:30:41.000000000 +1000
@@ -22,6 +22,9 @@
#include "snmpTargetAddrEntry.h"
#include "util_funcs/header_generic.h"
+#include <net-snmp/agent/agent_callbacks.h>
+#include <net-snmp/library/snmp_transport.h>
+
#define snmpTargetAddrOIDLen 11 /*This is base+column,
* i.e. everything but index */
@@ -336,10 +339,29 @@ init_snmpTargetAddrEntry(void)
snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
store_snmpTargetAddrEntry, NULL);
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_PRE_UPDATE_CONFIG,
+ snmpTargetAddr_unregister_addr_entries, NULL);
} /* init_snmpTargetAddrEntry */
int
+snmpTargetAddr_unregister_addr_entries(int major, int minor,
+ void *serverarg, void *clientarg)
+{
+ DEBUGMSGTL(("snmpTargetAddrEntry",
+ "snmpTargetAddr_unregister_addr_entries()\n"));
+
+ while (aAddrTable != NULL)
+ {
+ snmpTargetAddrTable_remFromList(aAddrTable, &aAddrTable);
+ }
+
+ return (0);
+} /* snmpTargetAddr_unregister_addr_entries
*/
+
+
+int
snmpTargetAddr_addName(struct targetAddrTable_struct *entry, char *cptr)
{
size_t len;
--- netsnmp/agent/mibgroup/target/snmpTargetAddrEntry.h 2008-05-21
09:00:28.000000000 +1000
+++ netsnmp/agent/mibgroup/target/snmpTargetAddrEntry.h 2011-04-14
11:58:15.000000000 +1000
@@ -70,6 +70,9 @@ config_add_mib(SNMPv2-TM)
int store_snmpTargetAddrEntry(int majorID, int minorID,
void *serverarg,
void *clientarg);
+ int snmpTargetAddr_unregister_addr_entries(int major, int
minor,
+ void *serverarg, void
*clientarg);
+
FindVarMethod var_snmpTargetAddrEntry;
struct targetAddrTable_struct *get_addrTable(void);
--- netsnmp/agent/mibgroup/target/snmpTargetParamsEntry.c 2010-03-26
22:58:03.000000000 +1100
+++ netsnmp/agent/mibgroup/target/snmpTargetParamsEntry.c 2011-04-19
17:18:24.000000000 +1000
@@ -19,6 +19,8 @@
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/agent_callbacks.h>
+
#include "snmpTargetParamsEntry.h"
#define snmpTargetParamsOIDLen 11 /*This is base+column,
@@ -290,8 +292,26 @@ init_snmpTargetParamsEntry(void)
*/
snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
store_snmpTargetParamsEntry, NULL);
+
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_PRE_UPDATE_CONFIG,
+ snmpTargetParams_unregister_params_entries,
NULL);
} /* init_snmpTargetParmsEntry */
+int
+snmpTargetParams_unregister_params_entries(int major, int minor,
+ void *serverarg, void *clientarg)
+{
+ DEBUGMSGTL(("snmpTargetParams",
+ "snmpTargetParams_unregister_params_entries()\n"));
+
+ while (aPTable != NULL)
+ {
+ snmpTargetParamTable_remFromList(aPTable, &aPTable);
+ }
+
+ return (0);
+} /*
snmpTargetParams_unregister_params_entries */
int
snmpTargetParams_addParamName(struct targetParamTable_struct *entry,
--- netsnmp/agent/mibgroup/target/snmpTargetParamsEntry.h 2008-05-21
08:40:56.000000000 +1000
+++ netsnmp/agent/mibgroup/target/snmpTargetParamsEntry.h 2011-04-19
17:21:56.000000000 +1000
@@ -60,6 +60,9 @@
void snmpd_parse_config_targetParams(const char *, char *);
+ int snmpTargetParams_unregister_params_entries(int major,
int minor,
+ void *serverarg, void
*clientarg);
+
WriteMethod write_snmpTargetParamsMPModel;
WriteMethod write_snmpTargetParamsSecModel;
WriteMethod write_snmpTargetParamsSecName;
--- netsnmp/snmplib/snmp_transport.c 2010-08-02 21:02:52.000000000 +1000
+++ netsnmp/snmplib/snmp_transport.c 2011-04-20 10:24:16.000000000 +1000
@@ -196,9 +196,12 @@ netsnmp_transport_free(netsnmp_transport
if (t->local != NULL) {
SNMP_FREE(t->local);
}
+//DNG HACK- Causes VACM read_config to crash snmpd, after HUP received:
+#if 0
if (t->remote != NULL) {
SNMP_FREE(t->remote);
}
+#endif
if (t->data != NULL) {
SNMP_FREE(t->data);
}
------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve
application availability and disaster protection. Learn more about boosting
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
_______________________________________________
Net-snmp-coders mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders