summaryrefslogtreecommitdiff
path: root/src/sim/eventq.cc
diff options
context:
space:
mode:
authorSteve Reinhardt <stever@eecs.umich.edu>2006-06-09 23:18:46 -0400
committerSteve Reinhardt <stever@eecs.umich.edu>2006-06-09 23:18:46 -0400
commit95019d0c6f1675f42d899f2899e06d3017088f25 (patch)
tree7618cd95da8299faff8dd682e088ee707cae6a7f /src/sim/eventq.cc
parent6de5d73a999240f92f050393bb10028968275835 (diff)
parent29e34a739b991af8d8e1eafe75ecb0904c324dc8 (diff)
downloadgem5-95019d0c6f1675f42d899f2899e06d3017088f25.tar.xz
Merge vm1.(none):/home/stever/bk/newmem
into vm1.(none):/home/stever/bk/newmem-py src/python/m5/__init__.py: src/sim/syscall_emul.cc: Hand merge. --HG-- extra : convert_revision : e2542735323e648383c89382421d98a7d1d761bf
Diffstat (limited to 'src/sim/eventq.cc')
-rw-r--r--src/sim/eventq.cc13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/sim/eventq.cc b/src/sim/eventq.cc
index d90d0923a..6ae838897 100644
--- a/src/sim/eventq.cc
+++ b/src/sim/eventq.cc
@@ -102,7 +102,7 @@ EventQueue::remove(Event *event)
prev->next = curr->next;
}
-void
+Event *
EventQueue::serviceOne()
{
Event *event = head;
@@ -110,13 +110,20 @@ EventQueue::serviceOne()
head = event->next;
// handle action
- if (!event->squashed())
+ if (!event->squashed()) {
event->process();
- else
+ if (event->isExitEvent()) {
+ assert(!event->getFlags(Event::AutoDelete)); // would be silly
+ return event;
+ }
+ } else {
event->clearFlags(Event::Squashed);
+ }
if (event->getFlags(Event::AutoDelete) && !event->scheduled())
delete event;
+
+ return NULL;
}