aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/music.cpp
diff options
context:
space:
mode:
authorSven Hesse2006-05-31 08:44:14 +0000
committerSven Hesse2006-05-31 08:44:14 +0000
commit05499f58dd2e79cae46bd4f250df946261bdac35 (patch)
tree20e9ab41a9e9039a85edc9ab891587f7b55a9534 /engines/gob/music.cpp
parent321acd2740936efeb85eb5b771cbfc86a3545e9b (diff)
downloadscummvm-rg350-05499f58dd2e79cae46bd4f250df946261bdac35.tar.gz
scummvm-rg350-05499f58dd2e79cae46bd4f250df946261bdac35.tar.bz2
scummvm-rg350-05499f58dd2e79cae46bd4f250df946261bdac35.zip
- Removed usage of OSystem::quit(), added a _quitRequested variable
- Fixed some leaks, unitialized memory and delete/delete[]-errors svn-id: r22790
Diffstat (limited to 'engines/gob/music.cpp')
-rw-r--r--engines/gob/music.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/engines/gob/music.cpp b/engines/gob/music.cpp
index a65aaeb0d1..71108cc968 100644
--- a/engines/gob/music.cpp
+++ b/engines/gob/music.cpp
@@ -72,6 +72,8 @@ const unsigned char Music::_volRegNums[] = {
};
Music::Music(GobEngine *vm) : _vm(vm) {
+ int i;
+
_data = 0;
_playPos = 0;
_dataSize = 0;
@@ -81,15 +83,20 @@ Music::Music(GobEngine *vm) : _vm(vm) {
_first = true;
_ended = false;
_playing = false;
+ _needFree = false;
_repCount = -1;
_samplesTillPoll = 0;
+ for (i = 0; i < 16; i ++)
+ _pollNotes[i] = 0;
+
setFreqs();
}
Music::~Music(void) {
- if (_data);
- delete _data;
+ OPLDestroy(_opl);
+ if (_data && _needFree)
+ delete[] _data;
_vm->_mixer->setupPremix(0);
}
@@ -439,6 +446,7 @@ bool Music::loadMusic(const char *filename) {
if (!song.isOpen())
return false;
+ _needFree = true;
_dataSize = song.size();
_data = new byte[_dataSize];
song.read(_data, _dataSize);
@@ -452,7 +460,7 @@ bool Music::loadMusic(const char *filename) {
}
void Music::loadFromMemory(byte *data) {
- _playing = false;
+ unloadMusic();
_repCount = 0;
_dataSize = (uint32) -1;
@@ -466,8 +474,10 @@ void Music::loadFromMemory(byte *data) {
void Music::unloadMusic(void) {
_playing = false;
- if (_data)
- delete _data;
+ if (_data && _needFree)
+ delete[] _data;
+
+ _needFree = false;
}
} // End of namespace Gob