fix for needing to always flush optimization information for identifiers

This commit is contained in:
Vern Paxson 2024-01-10 18:48:51 -08:00 committed by Arne Welzel
parent 501bf167c3
commit 71a1aa0afd
3 changed files with 34 additions and 5 deletions

View file

@ -507,9 +507,6 @@ static void analyze_scripts_for_ZAM() {
void clear_script_analysis() {
IDOptInfo::ClearGlobalInitExprs();
// Keep the functions around if we're debugging, so we can
// generate profiles.
#ifndef DEBUG
// We need to explicitly clear out the optimization information
// associated with identifiers. They have reference loops with
// the parent identifier that will prevent reclamation of the
@ -519,8 +516,10 @@ void clear_script_analysis() {
for ( auto& id : f.Scope()->OrderedVars() )
id->ClearOptInfo();
funcs.clear();
#endif
// Keep the functions around if we're profiling, so we can loop
// over them to generate the profiles.
if ( ! analysis_options.profile_ZAM )
funcs.clear();
non_recursive_funcs.clear();
lambdas.clear();

View file

@ -0,0 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
expire, new, 42

View file

@ -0,0 +1,28 @@
# @TEST-EXEC: zeek -b -r $TRACES/wikipedia.trace %INPUT >out
# @TEST-EXEC: btest-diff out
# Default timer expiration interval is very conservative (10sec) and never runs for short pcaps.
redef table_expire_interval = 0.01sec;
function f(t: table[string] of count, k: string): interval
{
print "expire", k, t[k];
return 0.0sec;
}
global t: table[string] of count &create_expire=0.1sec &expire_func=f;
# Populate the initial table with two entries.
event zeek_init() &priority=5
{
t["a"] = 10;
t["b"] = 20;
}
# Replace global t, deleting all entries. In a DEBUG build, table continued
# to exist and its entries spuriously expired over time.
event zeek_init()
{
t = table() &create_expire=0.1sec &expire_func=f;
t["new"] = 42;
}