From fa30d4a31365c448cd044d1dc4a5dc08a26ce7f2 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Mon, 22 Apr 2013 12:55:07 -0500 Subject: [PATCH] Fix schedule statements used outside event handlers (addresses #974). --- src/Expr.cc | 4 ++++ testing/btest/Baseline/language.event/out | 4 +++- testing/btest/language/event.bro | 9 ++++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Expr.cc b/src/Expr.cc index dd514df74b..7cceccc117 100644 --- a/src/Expr.cc +++ b/src/Expr.cc @@ -4297,6 +4297,10 @@ Val* ScheduleExpr::Eval(Frame* f) const if ( args ) { TimerMgr* tmgr = mgr.CurrentTimerMgr(); + + if ( ! tmgr ) + tmgr = timer_mgr; + tmgr->Add(new ScheduleTimer(event->Handler(), args, dt, tmgr)); } diff --git a/testing/btest/Baseline/language.event/out b/testing/btest/Baseline/language.event/out index d5a22b3745..41c3e0d717 100644 --- a/testing/btest/Baseline/language.event/out +++ b/testing/btest/Baseline/language.event/out @@ -1,4 +1,6 @@ event statement event part1 event part2 -schedule statement +schedule statement in bro_init +schedule statement in global +schedule statement another in bro_init diff --git a/testing/btest/language/event.bro b/testing/btest/language/event.bro index e251a3e579..39a3e0da48 100644 --- a/testing/btest/language/event.bro +++ b/testing/btest/language/event.bro @@ -9,9 +9,9 @@ event e1() print "Error: this should not happen"; } -event e2() +event e2(s: string) { - print "schedule statement"; + print fmt("schedule statement %s", s); } event e3(test: string) @@ -36,7 +36,8 @@ event bro_init() event e1(); # Test calling an event with "schedule" statement - schedule 1 sec { e2() }; + schedule 1 sec { e2("in bro_init") }; + schedule 3 sec { e2("another in bro_init") }; # Test calling an event that has two separate definitions event e3("foo"); @@ -47,3 +48,5 @@ event bro_init() event e5(6); # TODO: this does not do anything } +# scheduling in outside of an event handler shouldn't crash. +schedule 2sec { e2("in global") };