Fixing another memory leak.

This is the ConnVal leak that Gilbert also saw.
This commit is contained in:
Robin Sommer 2011-07-07 19:46:40 -07:00
parent d3e764155e
commit eb0580c622
5 changed files with 13 additions and 6 deletions

View file

@ -348,19 +348,18 @@ RecordVal* Connection::BuildConnVal()
id_val->Assign(2, new AddrVal(resp_addr)); id_val->Assign(2, new AddrVal(resp_addr));
id_val->Assign(3, new PortVal(ntohs(resp_port), prot_type)); id_val->Assign(3, new PortVal(ntohs(resp_port), prot_type));
conn_val->Assign(0, id_val);
RecordVal *orig_endp = new RecordVal(endpoint); RecordVal *orig_endp = new RecordVal(endpoint);
orig_endp->Assign(0, new Val(0, TYPE_COUNT)); orig_endp->Assign(0, new Val(0, TYPE_COUNT));
orig_endp->Assign(1, new Val(0, TYPE_COUNT)); orig_endp->Assign(1, new Val(0, TYPE_COUNT));
conn_val->Assign(1, orig_endp);
RecordVal *resp_endp = new RecordVal(endpoint); RecordVal *resp_endp = new RecordVal(endpoint);
resp_endp->Assign(0, new Val(0, TYPE_COUNT)); resp_endp->Assign(0, new Val(0, TYPE_COUNT));
resp_endp->Assign(1, new Val(0, TYPE_COUNT)); resp_endp->Assign(1, new Val(0, TYPE_COUNT));
conn_val->Assign(2, resp_endp);
// conn_val->Assign(3, new Val(start_time, TYPE_TIME)); // ### conn_val->Assign(0, id_val);
conn_val->Assign(1, orig_endp);
conn_val->Assign(2, resp_endp);
// 3 and 4 are set below.
conn_val->Assign(5, new TableVal(string_set)); // service conn_val->Assign(5, new TableVal(string_set)); // service
conn_val->Assign(6, new StringVal("")); // addl conn_val->Assign(6, new StringVal("")); // addl
conn_val->Assign(7, new Val(0, TYPE_COUNT)); // hot conn_val->Assign(7, new Val(0, TYPE_COUNT)); // hot

View file

@ -3469,6 +3469,7 @@ Val* SetConstructorExpr::Eval(Frame* f) const
{ {
Val* element = exprs[i]->Eval(f); Val* element = exprs[i]->Eval(f);
aggr->Assign(element, 0); aggr->Assign(element, 0);
Unref(element);
} }
return aggr; return aggr;

View file

@ -385,6 +385,8 @@ LogMgr::Filter::~Filter()
for ( int i = 0; i < num_fields; ++i ) for ( int i = 0; i < num_fields; ++i )
delete fields[i]; delete fields[i];
free(fields);
Unref(path_val); Unref(path_val);
} }

View file

@ -364,7 +364,7 @@ char* uitoa_n(uint64 value, char* str, int n, int base, const char* prefix)
i += strlen(prefix); i += strlen(prefix);
} }
if ( i >= n ) if ( i >= n - 1 )
return str; return str;
v = value; v = value;

View file

@ -0,0 +1,5 @@
# Needs perftools support.
#
# @TEST-REQUIRES: bro --help 2>&1 | grep -q mem-leaks
#
# @TEST-EXEC: HEAP_CHECK_DUMP_DIRECTORY=. HEAPCHECK=local bro -m -r $TRACES/wikipedia.trace test-all