summaryrefslogtreecommitdiff
path: root/src/systemc/core/scheduler.hh
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-09-07 15:42:51 -0700
committerGabe Black <gabeblack@google.com>2018-10-09 21:42:44 +0000
commitc524f21396457c55435f852bcf0bb4befb91ddba (patch)
tree5775e3ae966f4a928e8ae88db0e6faa88247eebd /src/systemc/core/scheduler.hh
parent18b2e3b7c954b6b5916ba8c39e731e219277e5f4 (diff)
downloadgem5-c524f21396457c55435f852bcf0bb4befb91ddba.tar.xz
systemc: Catch exceptions during updates, notifications, and callbacks.
Change-Id: I6005c12ce32d24413618e3955625432985f99f69 Reviewed-on: https://gem5-review.googlesource.com/c/12607 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/core/scheduler.hh')
-rw-r--r--src/systemc/core/scheduler.hh12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/systemc/core/scheduler.hh b/src/systemc/core/scheduler.hh
index 7b6238843..052be08c3 100644
--- a/src/systemc/core/scheduler.hh
+++ b/src/systemc/core/scheduler.hh
@@ -457,8 +457,16 @@ Scheduler::TimeSlot::process()
{
scheduler.status(StatusTiming);
- while (!events.empty())
- events.front()->run();
+ try {
+ while (!events.empty())
+ events.front()->run();
+ } catch (...) {
+ if (events.empty())
+ scheduler.completeTimeSlot(this);
+ else
+ scheduler.schedule(this);
+ scheduler.throwToScMain();
+ }
scheduler.status(StatusOther);
scheduler.completeTimeSlot(this);