1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-01 09:24:10 +01:00

Make the uavobjectutilmanager handle the error condition on saving and not

segfault when a save fails.
This commit is contained in:
James Cotton 2012-06-03 17:26:37 -05:00
parent e341a37bd1
commit 2d80d59e93

View File

@ -199,21 +199,28 @@ void UAVObjectUtilManager::objectPersistenceOperationFailed()
*/ */
void UAVObjectUtilManager::objectPersistenceUpdated(UAVObject * obj) void UAVObjectUtilManager::objectPersistenceUpdated(UAVObject * obj)
{ {
qDebug() << "objectPersistenceUpdated: " << obj->getField("Operation")->getValue().toString(); Q_ASSERT(obj);
Q_ASSERT(obj->getName().compare("ObjectPersistence") == 0); Q_ASSERT(obj->getObjID() == ObjectPersistence::OBJID);
if(saveState == AWAITING_COMPLETED) { ObjectPersistence::DataFields objectPersistence = ((ObjectPersistence *)obj)->getData();
failureTimer.stop();
// Check flight is saying it completed. This is the only thing flight should do to trigger an update.
Q_ASSERT( obj->getField("Operation")->getValue().toString().compare(QString("Completed")) == 0 );
if(saveState == AWAITING_COMPLETED && objectPersistence.Operation == ObjectPersistence::OPERATION_ERROR) {
failureTimer.stop();
objectPersistenceOperationFailed();
} else if (saveState == AWAITING_COMPLETED &&
objectPersistence.Operation == ObjectPersistence::OPERATION_COMPLETED) {
failureTimer.stop();
// Check right object saved // Check right object saved
UAVObject* savingObj = queue.head(); UAVObject* savingObj = queue.head();
Q_ASSERT( obj->getField("ObjectID")->getValue() == savingObj->getObjID() ); if(objectPersistence.ObjectID != savingObj->getObjID() ) {
objectPersistenceOperationFailed();
return;
}
obj->disconnect(this); obj->disconnect(this);
queue.dequeue(); // We can now remove the object, it's done. queue.dequeue(); // We can now remove the object, it's done.
saveState = IDLE; saveState = IDLE;
emit saveCompleted(obj->getField("ObjectID")->getValue().toInt(), true);
emit saveCompleted(objectPersistence.ObjectID, true);
saveNextObject(); saveNextObject();
} }
} }