aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorBastien Bouclet2019-11-15 21:24:22 +0100
committerBastien Bouclet2019-11-15 21:24:22 +0100
commit34bf3f2de0e2722f8a6e951e8fb5be069ba7299f (patch)
tree3d59490a3dcb2c2d467d0f7ccf24b25dee6503db /common
parentc87ca97b2252999f3edb326cfd7a22fc639fbb64 (diff)
downloadscummvm-rg350-34bf3f2de0e2722f8a6e951e8fb5be069ba7299f.tar.gz
scummvm-rg350-34bf3f2de0e2722f8a6e951e8fb5be069ba7299f.tar.bz2
scummvm-rg350-34bf3f2de0e2722f8a6e951e8fb5be069ba7299f.zip
TTS: Fix use of virtual function in TTSMan destructor
TextToSpeechManager::freeVoiceData was called while the virtual function table pointer was already reset by the parent class destructor.
Diffstat (limited to 'common')
-rw-r--r--common/text-to-speech.cpp18
-rw-r--r--common/text-to-speech.h3
2 files changed, 11 insertions, 10 deletions
diff --git a/common/text-to-speech.cpp b/common/text-to-speech.cpp
index fa74e53c36..8e4742b3e9 100644
--- a/common/text-to-speech.cpp
+++ b/common/text-to-speech.cpp
@@ -88,15 +88,6 @@ TextToSpeechManager::TextToSpeechManager() {
_ttsState->_next = nullptr;
}
-TextToSpeechManager::~TextToSpeechManager() {
- TTSState *tmp = _ttsState;
- while (tmp != nullptr) {
- tmp = _ttsState->_next;
- delete _ttsState;
- _ttsState = tmp;
- }
-}
-
void TextToSpeechManager::pushState() {
stop();
TTSState *newState = new TTSState;
@@ -130,6 +121,15 @@ bool TextToSpeechManager::popState() {
return false;
}
+void TextToSpeechManager::clearState() {
+ TTSState *tmp = _ttsState;
+ while (tmp != nullptr) {
+ tmp = _ttsState->_next;
+ delete _ttsState;
+ _ttsState = tmp;
+ }
+}
+
TTSVoice TextToSpeechManager::getVoice() {
if (!_ttsState->_availableVoices.empty())
return _ttsState->_availableVoices[_ttsState->_activeVoice];
diff --git a/common/text-to-speech.h b/common/text-to-speech.h
index 14cbab17a5..cd34c28747 100644
--- a/common/text-to-speech.h
+++ b/common/text-to-speech.h
@@ -149,7 +149,7 @@ public:
* pitch and volume to their middle values.
*/
TextToSpeechManager();
- virtual ~TextToSpeechManager();
+ virtual ~TextToSpeechManager() {}
/**
* Interrupts what's being said and says the given string
@@ -311,6 +311,7 @@ public:
protected:
TTSState *_ttsState;
+ void clearState();
virtual void updateVoices() {};
};