mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-24 21:21:05 +00:00
HUGO: Fixed ReadPCX Memory Leak
freeObjects now works correctly. svn-id: r54796
This commit is contained in:
parent
5ee7a44cf6
commit
dda67d651b
@ -217,31 +217,26 @@ void ObjectHandler::freeObjects() {
|
|||||||
// Free all sequence lists and image data
|
// Free all sequence lists and image data
|
||||||
for (int i = 0; i < _numObj; i++) {
|
for (int i = 0; i < _numObj; i++) {
|
||||||
object_t *obj = &_objects[i];
|
object_t *obj = &_objects[i];
|
||||||
debugC(1, kDebugObject, "\tObject %d: %d Sequences", i, obj->seqNumb);
|
for (int j = 0; j < obj->seqNumb; j++) {
|
||||||
|
seq_t *seq = obj->seqList[j].seqPtr;
|
||||||
debugC(1, kDebugObject, "\tObject %d->currImagePtr: %p", i, (void *) obj->currImagePtr);
|
seq_t *next;
|
||||||
// FIXME - currImagePtr can be an alias into one of obj->seqList[].seqPtr so need to avoid freeing in that case.
|
if (seq == 0) // Failure during database load
|
||||||
//if (obj->currImagePtr != 0 && obj->currImagePtr != seq) {
|
|
||||||
// free(obj->currImagePtr);
|
|
||||||
// obj->currImagePtr = 0;
|
|
||||||
//}
|
|
||||||
|
|
||||||
for (int j = 0; j < obj->seqNumb; j++) { // for each sequence
|
|
||||||
debugC(1, kDebugObject, "\tSequence %d: seqlist %p", j, (void *) &obj->seqList[j]);
|
|
||||||
debugC(1, kDebugObject, "\tSequence %d: seqPtr %p", j, (void *) obj->seqList[j].seqPtr);
|
|
||||||
seq_t *seq = obj->seqList[j].seqPtr; // Free image
|
|
||||||
if (seq == 0) // Failure during database load
|
|
||||||
break;
|
break;
|
||||||
do {
|
if (seq->imagePtr != 0) {
|
||||||
debugC(1, kDebugObject, "\t\tseq->ImagePtr: %p", seq->imagePtr);
|
free(seq->imagePtr);
|
||||||
|
seq->imagePtr = 0;
|
||||||
|
}
|
||||||
|
seq = seq->nextSeqPtr;
|
||||||
|
while (seq != obj->seqList[j].seqPtr) {
|
||||||
if (seq->imagePtr != 0) {
|
if (seq->imagePtr != 0) {
|
||||||
free(seq->imagePtr);
|
free(seq->imagePtr);
|
||||||
seq->imagePtr = 0;
|
seq->imagePtr = 0;
|
||||||
}
|
}
|
||||||
seq = seq->nextSeqPtr;
|
next = seq->nextSeqPtr;
|
||||||
} while (seq != obj->seqList[j].seqPtr);
|
free(seq);
|
||||||
free(seq); // Free sequence record
|
seq = next;
|
||||||
seq = 0;
|
}
|
||||||
|
free(seq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user