Ticket #8521: saga_mem_leaks.diff

File saga_mem_leaks.diff, 2.7 KB (added by cyxx, 14 years ago)

Patch against a 27th Feb SVN snapshot

  • saga/music.cpp

     
    305305        _songTable = 0;
    306306
    307307        _track = NULL;
     308       
     309        _midiMusicData = NULL;
     310        _midiMusicSize = 0;
    308311}
    309312
    310313Music::~Music() {
     
    316319        delete smfParser;
    317320
    318321        free(_songTable);
     322        free(_midiMusicData);
    319323}
    320324
    321325void Music::musicVolumeGaugeCallback(void *refCon) {
     
    371375        AudioStream *audioStream = NULL;
    372376        MidiParser *parser;
    373377        ResourceContext *context;
    374         byte *resourceData;
    375         size_t resourceSize;
    376378
    377379        debug(2, "Music::play %d, %d", resourceId, flags);
    378380
     
    432434                flags = MUSIC_NORMAL;
    433435        }
    434436
    435         // FIXME: Is resource_data ever freed?
    436437        // Load MIDI/XMI resource data
    437438
    438439        if (_vm->getGameType() == GType_ITE) {
     
    473474
    474475        _player->setGM(true);
    475476
    476         _vm->_resource->loadResource(context, resourceId, resourceData, resourceSize);
    477 
    478         if (resourceSize < 4) {
     477        if (_midiMusicData) {
     478                free(_midiMusicData);
     479        }
     480        _vm->_resource->loadResource(context, resourceId, _midiMusicData, _midiMusicSize);
     481        if (_midiMusicSize < 4) {
    479482                error("Music::play() wrong music resource size");
    480483        }
    481484
    482         if (xmidiParser->loadMusic(resourceData, resourceSize)) {
     485        if (xmidiParser->loadMusic(_midiMusicData, _midiMusicSize)) {
    483486                if (_vm->getGameType() == GType_ITE)
    484487                        _player->setGM(false);
    485488
    486489                parser = xmidiParser;
    487490        } else {
    488                 if (smfParser->loadMusic(resourceData, resourceSize)) {
     491                if (smfParser->loadMusic(_midiMusicData, _midiMusicSize)) {
    489492                        parser = smfParser;
    490493                } else {
    491494                        error("Music::play() wrong music resource");
  • saga/music.h

     
    9292
    9393        byte *_musicData;
    9494        uint16 *_buf;
    95         uint32 _musicDataSize;
     95        size_t _musicDataSize;
    9696};
    9797
    9898class Music {
     
    137137        MidiParser *xmidiParser;
    138138        MidiParser *smfParser;
    139139
     140        byte *_midiMusicData;
     141        size_t _midiMusicSize;
     142
    140143        DigitalTrackInfo *_track;
    141144
    142145        static void musicVolumeGaugeCallback(void *refCon);
  • saga/rscfile.cpp

     
    313313                        subjectResourceData->offset = resourceData->offset;
    314314                        subjectResourceData->size = resourceData->size;
    315315                }
    316 
     316                free(tableBuffer);
    317317        }
    318318
    319319        //process external patch files
     
    547547        }
    548548
    549549        _vm->_anim->loadCutawayList(resourcePointer, resourceLength);
     550        free(resourcePointer);
    550551
    551552        _vm->_resource->loadResource(resourceContext, _metaResource.songTableID, resourcePointer, resourceLength);
    552553