fix the checkpoint bug
--HG-- extra : convert_revision : 1ccae3282737d70b14ff86c8647e2e662a42c3bc
This commit is contained in:
parent
d1e6f48203
commit
7929b9ee19
|
@ -1448,6 +1448,8 @@ Base::unserialize(Checkpoint *cp, const std::string §ion)
|
|||
void
|
||||
Device::serialize(ostream &os)
|
||||
{
|
||||
int count;
|
||||
|
||||
// Serialize the PciDev base class
|
||||
Base::serialize(os);
|
||||
|
||||
|
|
|
@ -51,8 +51,9 @@
|
|||
|
||||
using namespace std;
|
||||
|
||||
int Serializable::maxCount = 0;
|
||||
int Serializable::count = 0;
|
||||
int Serializable::ckptMaxCount = 0;
|
||||
int Serializable::ckptCount = 0;
|
||||
int Serializable::ckptPrevCount = -1;
|
||||
|
||||
void
|
||||
Serializable::nameOut(ostream &os)
|
||||
|
@ -241,8 +242,11 @@ Serializable::serializeAll()
|
|||
globals.serialize(outstream);
|
||||
SimObject::serializeAll(outstream);
|
||||
|
||||
if (maxCount && ++count >= maxCount)
|
||||
assert(Serializable::ckptPrevCount + 1 == Serializable::ckptCount);
|
||||
Serializable::ckptPrevCount++;
|
||||
if (ckptMaxCount && ++ckptCount >= ckptMaxCount)
|
||||
SimExit(curTick + 1, "Maximum number of checkpoints dropped");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -352,7 +356,7 @@ SerializeParamContext::checkParams()
|
|||
if (serialize_cycle > 0)
|
||||
Checkpoint::setup(serialize_cycle, serialize_period);
|
||||
|
||||
Serializable::maxCount = serialize_count;
|
||||
Serializable::ckptMaxCount = serialize_count;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -119,8 +119,9 @@ class Serializable
|
|||
static Serializable *create(Checkpoint *cp,
|
||||
const std::string §ion);
|
||||
|
||||
static int count;
|
||||
static int maxCount;
|
||||
static int ckptCount;
|
||||
static int ckptMaxCount;
|
||||
static int ckptPrevCount;
|
||||
static void serializeAll();
|
||||
static void unserializeGlobals(Checkpoint *cp);
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue