mirror of
https://github.com/zeek/zeek.git
synced 2025-10-05 16:18:19 +00:00
Fix a memory leak in ASCII log writer.
This commit is contained in:
parent
9b672f9e7f
commit
13d8908a8d
2 changed files with 77 additions and 0 deletions
|
@ -175,6 +175,7 @@ bool Ascii::DoInit(const WriterInfo& info, int num_fields, const Field* const *
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete formatter;
|
||||||
formatter = new formatter::JSON(this, tf);
|
formatter = new formatter::JSON(this, tf);
|
||||||
// Using JSON implicitly turns off the header meta fields.
|
// Using JSON implicitly turns off the header meta fields.
|
||||||
include_meta = false;
|
include_meta = false;
|
||||||
|
@ -186,6 +187,7 @@ bool Ascii::DoInit(const WriterInfo& info, int num_fields, const Field* const *
|
||||||
desc.EnableEscaping();
|
desc.EnableEscaping();
|
||||||
desc.AddEscapeSequence(separator);
|
desc.AddEscapeSequence(separator);
|
||||||
formatter::Ascii::SeparatorInfo sep_info(separator, set_separator, unset_field, empty_field);
|
formatter::Ascii::SeparatorInfo sep_info(separator, set_separator, unset_field, empty_field);
|
||||||
|
delete formatter;
|
||||||
formatter = new formatter::Ascii(this, sep_info);
|
formatter = new formatter::Ascii(this, sep_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
75
testing/btest/core/leaks/ascii-log-rotation.bro
Normal file
75
testing/btest/core/leaks/ascii-log-rotation.bro
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
# Needs perftools support.
|
||||||
|
#
|
||||||
|
# @TEST-SERIALIZE: comm
|
||||||
|
# @TEST-GROUP: leaks
|
||||||
|
#
|
||||||
|
# @TEST-REQUIRES: bro --help 2>&1 | grep -q mem-leaks
|
||||||
|
#
|
||||||
|
# @TEST-EXEC: btest-bg-run receiver HEAP_CHECK_DUMP_DIRECTORY=. HEAPCHECK=local bro -b -m ../receiver.bro
|
||||||
|
# @TEST-EXEC: sleep 1
|
||||||
|
# @TEST-EXEC: btest-bg-run sender HEAP_CHECK_DUMP_DIRECTORY=. HEAPCHECK=local bro -b -m ../sender.bro
|
||||||
|
# @TEST-EXEC: sleep 1
|
||||||
|
# @TEST-EXEC: btest-bg-wait 60
|
||||||
|
|
||||||
|
@TEST-START-FILE sender.bro
|
||||||
|
|
||||||
|
@load base/frameworks/communication
|
||||||
|
@load base/protocols/dns
|
||||||
|
|
||||||
|
redef Communication::nodes += {
|
||||||
|
["foo"] = [$host = 127.0.0.1, $connect=T]
|
||||||
|
};
|
||||||
|
|
||||||
|
global write_count: count = 0;
|
||||||
|
|
||||||
|
event do_write()
|
||||||
|
{
|
||||||
|
print "do_write";
|
||||||
|
local cid: conn_id = conn_id($orig_h=1.2.3.4,$orig_p=1/tcp,
|
||||||
|
$resp_h=5.6.7.8,$resp_p=2/tcp);
|
||||||
|
local dns_info_dummy = DNS::Info($ts=network_time(), $uid="FAKE",
|
||||||
|
$id=cid, $proto=tcp);
|
||||||
|
Log::write(DNS::LOG, dns_info_dummy);
|
||||||
|
schedule .1sec { do_write() };
|
||||||
|
++write_count;
|
||||||
|
|
||||||
|
if ( write_count == 200 )
|
||||||
|
terminate();
|
||||||
|
}
|
||||||
|
|
||||||
|
event remote_connection_handshake_done(p: event_peer)
|
||||||
|
{
|
||||||
|
print "remote_connection_handshake_done", p;
|
||||||
|
schedule .1sec { do_write() };
|
||||||
|
}
|
||||||
|
|
||||||
|
event remote_connection_closed(p: event_peer)
|
||||||
|
{
|
||||||
|
print "remote_connection_closed", p;
|
||||||
|
}
|
||||||
|
|
||||||
|
@TEST-END-FILE
|
||||||
|
|
||||||
|
@TEST-START-FILE receiver.bro
|
||||||
|
|
||||||
|
@load frameworks/communication/listen
|
||||||
|
@load base/protocols/dns
|
||||||
|
|
||||||
|
redef Communication::nodes += {
|
||||||
|
["foo"] = [$host = 127.0.0.1, $connect=F, $request_logs=T]
|
||||||
|
};
|
||||||
|
|
||||||
|
redef Log::default_rotation_interval = 2sec;
|
||||||
|
|
||||||
|
event remote_connection_handshake_done(p: event_peer)
|
||||||
|
{
|
||||||
|
print "remote_connection_handshake_done", p;
|
||||||
|
}
|
||||||
|
|
||||||
|
event remote_connection_closed(p: event_peer)
|
||||||
|
{
|
||||||
|
print "remote_connection_closed", p;
|
||||||
|
terminate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@TEST-END-FILE
|
Loading…
Add table
Add a link
Reference in a new issue