44c44
< #include "debug/Config.hh"
---
> #include "debug/Checkpoint.hh"
256c256
< }
---
> assert(!scheduled());
258,263d257
< void
< Event::unserializeEvent(CheckpointIn &cp, EventQueue *eventq)
< {
< if (scheduled())
< eventq->deschedule(this);
<
267c261
< short _flags;
---
> FlagsType _flags;
283,288c277,281
< bool wasScheduled = flags.isSet(Scheduled) && !flags.isSet(Squashed);
< flags.clear(Squashed | Scheduled);
<
< if (wasScheduled) {
< DPRINTF(Config, "rescheduling at %d\n", _when);
< eventq->schedule(this, _when);
---
> if (flags.isSet(Scheduled) && !flags.isSet(Squashed)) {
> flags.clear(Squashed | Scheduled);
> } else {
> DPRINTF(Checkpoint, "Event '%s' need to be scheduled @%d\n",
> name(), _when);
332c325,330
< Serializable::create(cp, eventName);
---
> Serializable *obj(Serializable::create(cp, eventName));
> Event *event(dynamic_cast<Event *>(obj));
> fatal_if(!event,
> "Event queue unserialized something that wasn't an event.\n");
>
> checkpointReschedule(event);
336a335,343
> EventQueue::checkpointReschedule(Event *event)
> {
> // It's safe to call insert() directly here since this method
> // should only be called when restoring from a checkpoint (which
> // happens before thread creation).
> if (event->flags.isSet(Event::Scheduled))
> insert(event);
> }
> void