From: kostas <> Date: Thu, 26 Feb 1998 02:15:05 +0000 (+0000) Subject: fixed memory problem X-Git-Tag: SQUID_3_0_PRE1~3989 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0856c1244981cad05d47c1a828ba847006b25028;p=thirdparty%2Fsquid.git fixed memory problem --- diff --git a/src/acl.cc b/src/acl.cc index 0bef317b2c..5e47b208f8 100644 --- a/src/acl.cc +++ b/src/acl.cc @@ -1,6 +1,6 @@ /* - * $Id: acl.cc,v 1.141 1998/02/25 11:16:38 kostas Exp $ + * $Id: acl.cc,v 1.142 1998/02/25 19:15:05 kostas Exp $ * * DEBUG: section 28 Access Control * AUTHOR: Duane Wessels @@ -1484,6 +1484,7 @@ aclChecklistFree(aclCheck_t * checklist) fqdncacheUnregister(checklist->dst_addr, checklist); if (checklist->state[ACL_DST_IP] == ACL_LOOKUP_PENDING) ipcacheUnregister(checklist->request->host, checklist); + if (checklist->request) requestUnlink(checklist->request); checklist->request = NULL; cbdataFree(checklist); @@ -1548,7 +1549,8 @@ aclChecklistCreate(const acl_access * A, * pointer, so lock it. */ cbdataLock(A); - checklist->request = requestLink(request); + if (checklist->request) + checklist->request = requestLink(request); checklist->src_addr = src_addr; for (i = 0; i < ACL_ENUM_MAX; i++) checklist->state[i] = ACL_LOOKUP_NONE; diff --git a/src/cache_cf.cc b/src/cache_cf.cc index a9427d49b5..4abd8b78a3 100644 --- a/src/cache_cf.cc +++ b/src/cache_cf.cc @@ -1,6 +1,6 @@ /* - * $Id: cache_cf.cc,v 1.251 1998/02/25 11:16:39 kostas Exp $ + * $Id: cache_cf.cc,v 1.252 1998/02/25 19:15:06 kostas Exp $ * * DEBUG: section 3 Configuration File Parsing * AUTHOR: Harvest Derived @@ -436,6 +436,8 @@ free_acl(acl ** acl) aclDestroyAcls(acl); } +#if SQUID_SNMP + static void dump_snmp_access(StoreEntry * entry, const char *name, communityEntry * Head) { @@ -457,6 +459,7 @@ dump_snmp_access(StoreEntry * entry, const char *name, communityEntry * Head) } } } +#endif static void dump_acl_access(StoreEntry * entry, const char *name, acl_access * head) @@ -474,6 +477,8 @@ dump_acl_access(StoreEntry * entry, const char *name, acl_access * head) } } +#if SQUID_SNMP + static void parse_snmp_access(communityEntry **head) { @@ -497,6 +502,7 @@ free_snmp_access(communityEntry ** Head) for (cp = *Head; cp; cp = cp->next) aclDestroyAccessList(&cp->acls); } +#endif static void parse_acl_access(acl_access ** head) diff --git a/src/snmp_agent.cc b/src/snmp_agent.cc index 32f7301d61..7029ddfaae 100644 --- a/src/snmp_agent.cc +++ b/src/snmp_agent.cc @@ -40,6 +40,7 @@ snmp_agent_parse(snmp_request_t *rq) u_char *Community; /* Now that we have the data, turn it into a PDU */ + cbdataAdd(rq,MEM_NONE); PDU = snmp_pdu_create(0); Community = snmp_parse(Session, PDU, buf, len); rq->community=Community; @@ -52,6 +53,7 @@ snmp_agent_parse(snmp_request_t *rq) snmp_free_pdu(PDU); snmp_agent_parse_done(0, rq); + return; } snmpAclCheckStart(rq); } @@ -60,7 +62,6 @@ void snmpAclCheckStart(snmp_request_t *rq) { communityEntry *cp; - cbdataAdd(rq,MEM_NONE); for (cp=Config.Snmp.communities;cp!=NULL;cp=cp->next) if (!strcmp(rq->community, cp->name) && cp->acls) { rq->acl_checklist= aclChecklistCreate(cp->acls, @@ -85,11 +86,9 @@ snmpAclCheckDone(int answer, void *data) debug(49,5)("snmpAclCheckDone: called with answer=%d.\n",answer); rq->acl_checklist = NULL; - cbdataFree(rq); PDU=rq->PDU; Community=rq->community; if (answer==ACCESS_DENIED) { - xfree(Community); debug(49,5)("snmpAclCheckDone: failed on acl.\n"); snmp_agent_parse_done(0, rq); return; @@ -104,20 +103,17 @@ snmpAclCheckDone(int answer, void *data) /* access check for each variable */ if (!community_check(Community, VarPtr->name, VarPtr->name_length)) { - xfree(Community); debug(49,5)("snmpAclCheckDone: failed on community_check.\n"); snmp_agent_parse_done(0, rq); return; } } - xfree(Session->community); Session->community=xstrdup(Community); Session->community_len=strlen(Community); RespPDU = snmp_agent_response(PDU); snmp_free_pdu(PDU); if (RespPDU == NULL) { debug(49, 8) ("snmpAclCheckDone: RespPDU == NULL. Returning code 2.\n"); - xfree(Community); debug(49,5)("snmpAclCheckDone: failed on RespPDU==NULL.\n"); snmp_agent_parse_done(2, rq); return; @@ -129,7 +125,7 @@ snmpAclCheckDone(int answer, void *data) ret = snmp_build(Session, RespPDU, outbuf, &rq->outlen); /* XXXXX Handle failure */ snmp_free_pdu(RespPDU); - xfree(Community); + /* XXX maybe here */ debug(49,5)("snmpAclCheckDone: ok!\n"); snmp_agent_parse_done(1, rq); }