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:
parent
e341a37bd1
commit
2d80d59e93
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user