fix double free problem

This commit is contained in:
Seth Alves 2015-10-02 13:27:45 -07:00
parent c0e8b02a2f
commit 67cc944afc
2 changed files with 12 additions and 12 deletions

View file

@ -1528,7 +1528,8 @@ bool EntityItem::addActionInternal(EntitySimulation* simulation, EntityActionPoi
simulation->addAction(action);
bool success;
QByteArray newDataCache = serializeActions(success);
QByteArray newDataCache;
serializeActions(success, newDataCache);
if (success) {
_allActionsDataCache = newDataCache;
_dirtyFlags |= EntityItem::DIRTY_PHYSICS_ACTIVATION;
@ -1549,7 +1550,7 @@ bool EntityItem::updateAction(EntitySimulation* simulation, const QUuid& actionI
success = action->updateArguments(arguments);
if (success) {
_allActionsDataCache = serializeActions(success);
serializeActions(success, _allActionsDataCache);
_dirtyFlags |= EntityItem::DIRTY_PHYSICS_ACTIVATION;
} else {
qDebug() << "EntityItem::updateAction failed";
@ -1585,7 +1586,7 @@ bool EntityItem::removeActionInternal(const QUuid& actionID, EntitySimulation* s
}
bool success = true;
_allActionsDataCache = serializeActions(success);
serializeActions(success, _allActionsDataCache);
_dirtyFlags |= EntityItem::DIRTY_PHYSICS_ACTIVATION;
return success;
}
@ -1722,13 +1723,13 @@ void EntityItem::setActionDataInternal(QByteArray actionData) {
deserializeActionsInternal();
}
QByteArray EntityItem::serializeActions(bool& success) const {
void EntityItem::serializeActions(bool& success, QByteArray& result) const {
assertLocked();
QByteArray result;
if (_objectActions.size() == 0) {
success = true;
return QByteArray();
result.clear();
return;
}
QVector<QByteArray> serializedActions;
@ -1746,21 +1747,20 @@ QByteArray EntityItem::serializeActions(bool& success) const {
if (result.size() >= _maxActionsDataSize) {
success = false;
return result;
return;
}
success = true;
return result;
return;
}
const QByteArray EntityItem::getActionDataInternal() const {
if (_actionDataDirty) {
bool success;
QByteArray newDataCache = serializeActions(success);
serializeActions(success, _allActionsDataCache);
if (success) {
_allActionsDataCache = newDataCache;
_actionDataDirty = false;
}
_actionDataDirty = false;
}
return _allActionsDataCache;
}

View file

@ -508,7 +508,7 @@ protected:
bool addActionInternal(EntitySimulation* simulation, EntityActionPointer action);
bool removeActionInternal(const QUuid& actionID, EntitySimulation* simulation = nullptr);
void deserializeActionsInternal();
QByteArray serializeActions(bool& success) const;
void serializeActions(bool& success, QByteArray& result) const;
QHash<QUuid, EntityActionPointer> _objectActions;
static int _maxActionsDataSize;