mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00

These were previously reporting leaks due to various allocations not getting cleaned up during the stack unwind, but at the current state of the transition toward IntrusivePtr usage, theses tests no longer leak.
123 lines
2.3 KiB
Text
123 lines
2.3 KiB
Text
# @TEST-EXEC: btest-bg-run zeek "zeek -b %INPUT >output 2>&1"
|
|
# @TEST-EXEC: btest-bg-wait 30
|
|
# @TEST-EXEC: TEST_DIFF_CANONIFIER="grep -v 'already queued for removal' | $SCRIPTS/diff-remove-abspath | $SCRIPTS/diff-remove-timestamps | $SCRIPTS/diff-sort" btest-diff zeek/output
|
|
|
|
# interpreter exceptions in "when" blocks shouldn't cause termination
|
|
|
|
@load base/utils/exec
|
|
redef exit_only_after_terminate = T;
|
|
|
|
type MyRecord: record {
|
|
a: bool &default=T;
|
|
notset: bool &optional;
|
|
};
|
|
|
|
global myrecord: MyRecord;
|
|
|
|
global c = 0;
|
|
|
|
function check_term_condition()
|
|
{
|
|
++c;
|
|
|
|
#print "check_term_condition", c;
|
|
|
|
if ( c == 6 )
|
|
terminate();
|
|
}
|
|
|
|
event termination_check()
|
|
{
|
|
#print "termination_check event";
|
|
check_term_condition();
|
|
}
|
|
|
|
function f(do_exception: bool): bool
|
|
{
|
|
local cmd = Exec::Command($cmd=fmt("echo 'f(%s)'",
|
|
do_exception));
|
|
|
|
return when ( local result = Exec::run(cmd) )
|
|
{
|
|
print result$stdout;
|
|
|
|
if ( do_exception )
|
|
{
|
|
event termination_check();
|
|
print myrecord$notset;
|
|
}
|
|
|
|
return T;
|
|
}
|
|
|
|
check_term_condition();
|
|
return F;
|
|
}
|
|
|
|
function g(do_exception: bool): bool
|
|
{
|
|
local stall = Exec::Command($cmd="sleep 30");
|
|
|
|
return when ( local result = Exec::run(stall) )
|
|
{
|
|
print "shouldn't get here, g()", do_exception, result;
|
|
}
|
|
timeout 0 sec
|
|
{
|
|
print "timeout g()", do_exception;
|
|
|
|
if ( do_exception )
|
|
{
|
|
event termination_check();
|
|
print myrecord$notset;
|
|
}
|
|
|
|
return T;
|
|
}
|
|
|
|
check_term_condition();
|
|
return F;
|
|
}
|
|
|
|
event zeek_init()
|
|
{
|
|
local cmd = Exec::Command($cmd="echo 'zeek_init()'");
|
|
local stall = Exec::Command($cmd="sleep 30");
|
|
|
|
when ( local result = Exec::run(cmd) )
|
|
{
|
|
print result$stdout;
|
|
event termination_check();
|
|
print myrecord$notset;
|
|
}
|
|
|
|
when ( local result2 = Exec::run(stall) )
|
|
{
|
|
print "shouldn't get here", result2;
|
|
check_term_condition();
|
|
}
|
|
timeout 0 sec
|
|
{
|
|
print "timeout";
|
|
event termination_check();
|
|
print myrecord$notset;
|
|
}
|
|
|
|
when ( local b = f(T) )
|
|
print "f() exception done (shouldn't be printed)", b;
|
|
|
|
when ( local b2 = g(T) )
|
|
print "g() exception done (shouldn't be printed)", b2;
|
|
|
|
when ( local b3 = f(F) )
|
|
{
|
|
print "f() done, no exception", b3;
|
|
check_term_condition();
|
|
}
|
|
|
|
when ( local b4 = g(F) )
|
|
{
|
|
print "g() done, no exception", b4;
|
|
check_term_condition();
|
|
}
|
|
}
|