implement aboutToFinish for persist thread to allow final save before shutdown

This commit is contained in:
ZappoMan 2014-11-14 09:55:32 -08:00
parent edc599bc2d
commit 11058355a0
4 changed files with 33 additions and 14 deletions

View file

@ -1197,6 +1197,9 @@ void OctreeServer::aboutToFinish() {
qDebug() << qPrintable(_safeServerName) << "server about to finish while node still connected node:" << *node;
forceNodeShutdown(node);
}
if (_persistThread) {
_persistThread->aboutToFinish();
}
qDebug() << qPrintable(_safeServerName) << "server ENDING about to finish...";
}

View file

@ -1089,7 +1089,6 @@ bool DebugOperator::preRecursion(OctreeElement* element) {
}
void EntityTree::dumpTree() {
// First, look for the existing entity in the tree..
DebugOperator theOperator;
recurseTreeWithOperator(&theOperator);
}
@ -1107,7 +1106,6 @@ bool PruneOperator::postRecursion(OctreeElement* element) {
}
void EntityTree::pruneTree() {
// First, look for the existing entity in the tree..
PruneOperator theOperator;
recurseTreeWithOperator(&theOperator);
}

View file

@ -78,19 +78,33 @@ bool OctreePersistThread::process() {
quint64 intervalToCheck = _persistInterval * MSECS_TO_USECS;
if (sinceLastSave > intervalToCheck) {
// check the dirty bit and persist here...
_lastCheck = usecTimestampNow();
if (_tree->isDirty()) {
qDebug() << "pruning Octree before saving...";
_tree->pruneTree();
qDebug() << "DONE pruning Octree before saving...";
qDebug() << "saving Octree to file " << _filename << "...";
_tree->writeToSVOFile(_filename.toLocal8Bit().constData());
_tree->clearDirtyBit(); // tree is clean after saving
qDebug("DONE saving Octree to file...");
}
_lastCheck = now;
persistOperation();
}
}
return isStillRunning(); // keep running till they terminate us
}
void OctreePersistThread::aboutToFinish() {
qDebug() << "Persist thread about to finish...";
persistOperation();
qDebug() << "Persist thread done with about to finish...";
}
void OctreePersistThread::persistOperation() {
if (_tree->isDirty()) {
_tree->lockForWrite();
{
qDebug() << "pruning Octree before saving...";
_tree->pruneTree();
qDebug() << "DONE pruning Octree before saving...";
}
_tree->unlock();
qDebug() << "saving Octree to file " << _filename << "...";
_tree->writeToSVOFile(_filename.toLocal8Bit().constData());
_tree->clearDirtyBit(); // tree is clean after saving
qDebug("DONE saving Octree to file...");
}
}

View file

@ -29,12 +29,16 @@ public:
bool isInitialLoadComplete() const { return _initialLoadComplete; }
quint64 getLoadElapsedTime() const { return _loadTimeUSecs; }
void aboutToFinish(); /// call this to inform the persist thread that the owner is about to finish to support final persist
signals:
void loadCompleted();
protected:
/// Implements generic processing behavior for this thread.
virtual bool process();
void persistOperation();
private:
Octree* _tree;
QString _filename;