summaryrefslogtreecommitdiff
path: root/src/systemc/core/process.cc
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-10-08 23:08:27 -0700
committerGabe Black <gabeblack@google.com>2018-10-16 01:15:18 +0000
commit137b4993a4710a247d79cdc0194dfa107b080f98 (patch)
tree60beae2c190cd3ce4dd12a3eb6d2bbdee4e3f83c /src/systemc/core/process.cc
parentae1ecec85aa090b90c09cc126a32b8dfa810c94d (diff)
downloadgem5-137b4993a4710a247d79cdc0194dfa107b080f98.tar.xz
systemc: Don't re-schedule a process which is already scheduled.
Change-Id: I8e12713c49aad03d0bfb779883adcbfa8fd4b42e Reviewed-on: https://gem5-review.googlesource.com/c/13334 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/core/process.cc')
-rw-r--r--src/systemc/core/process.cc9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/systemc/core/process.cc b/src/systemc/core/process.cc
index a0759d9cc..e29cee030 100644
--- a/src/systemc/core/process.cc
+++ b/src/systemc/core/process.cc
@@ -359,7 +359,7 @@ Process::ready()
return;
if (suspended())
_suspendedReady = true;
- else
+ else if (!scheduled())
scheduler.ready(this);
}
@@ -381,9 +381,10 @@ Process::Process(const char *name, ProcessFuncWrapper *func, bool internal) :
timeoutEvent([this]() { this->timeout(); }),
func(func), _internal(internal), _timedOut(false), _dontInitialize(false),
_needsStart(true), _isUnwinding(false), _terminated(false),
- _suspended(false), _disabled(false), _syncReset(false), syncResetCount(0),
- asyncResetCount(0), _waitCount(0), refCount(0),
- stackSize(::Fiber::DefaultStackSize), dynamicSensitivity(nullptr)
+ _scheduled(false), _suspended(false), _disabled(false),
+ _syncReset(false), syncResetCount(0), asyncResetCount(0), _waitCount(0),
+ refCount(0), stackSize(::Fiber::DefaultStackSize),
+ dynamicSensitivity(nullptr)
{
_dynamic =
(::sc_core::sc_get_status() >