aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorLars Persson2006-03-01 21:37:00 +0000
committerLars Persson2006-03-01 21:37:00 +0000
commitd1e1f7cb5b637c76b25976bcdf3518396813d7b0 (patch)
tree73ef9c9fe79eb8e7bee961fcd3ac83b38a8eeeb7 /engines
parent9a9475169da1f25e85791481d07d92ac872c22ba (diff)
downloadscummvm-rg350-d1e1f7cb5b637c76b25976bcdf3518396813d7b0.tar.gz
scummvm-rg350-d1e1f7cb5b637c76b25976bcdf3518396813d7b0.tar.bz2
scummvm-rg350-d1e1f7cb5b637c76b25976bcdf3518396813d7b0.zip
Fix for Symbian to close an open file in the right thread
svn-id: r20996
Diffstat (limited to 'engines')
-rw-r--r--engines/scumm/smush/smush_player.cpp18
-rw-r--r--engines/scumm/smush/smush_player.h4
2 files changed, 20 insertions, 2 deletions
diff --git a/engines/scumm/smush/smush_player.cpp b/engines/scumm/smush/smush_player.cpp
index 2a3a4527aa..d87345a0c9 100644
--- a/engines/scumm/smush/smush_player.cpp
+++ b/engines/scumm/smush/smush_player.cpp
@@ -223,6 +223,13 @@ void SmushPlayer::timerCallback(void *refCon) {
((SmushPlayer *)refCon)->_inTimer = true;
((SmushPlayer *)refCon)->_inTimerCount++;
#endif
+#ifdef __SYMBIAN32__
+ if(((SmushPlayer *)refCon)->_closeOnTextTick) {
+ delete ((SmushPlayer *)refCon)->_base;
+ ((SmushPlayer *)refCon)->_base = NULL;
+ ((SmushPlayer *)refCon)->_closeOnTextTick = false;
+ }
+#endif
}
SmushPlayer::SmushPlayer(ScummEngine_v6 *scumm, int speed) {
@@ -262,6 +269,9 @@ SmushPlayer::SmushPlayer(ScummEngine_v6 *scumm, int speed) {
_inTimerCount = 0;
_inTimerCountRedraw = ConfMan.getInt("Smush_force_redraw");
#endif
+#ifdef __SYMBIA32__
+ _closeOnTextTick = false;
+#endif
}
SmushPlayer::~SmushPlayer() {
@@ -295,7 +305,13 @@ void SmushPlayer::init() {
void SmushPlayer::release() {
if (!_initDone)
return;
-
+#ifdef __SYMBIAN32__
+ _closeOnTextTick = true;
+ // Wait for _closeOnTextTick to be set to false to indicate file closure
+ while(_closeOnTextTick) {
+ User::After(15624);
+ }
+#endif
_vm->_timer->removeTimerProc(&timerCallback);
_vm->_smushVideoShouldFinish = true;
diff --git a/engines/scumm/smush/smush_player.h b/engines/scumm/smush/smush_player.h
index f697057d89..929f9d73d2 100644
--- a/engines/scumm/smush/smush_player.h
+++ b/engines/scumm/smush/smush_player.h
@@ -90,7 +90,9 @@ private:
int16 _inTimerCount;
int16 _inTimerCountRedraw;
#endif
-
+#ifdef __SYMBIAN32__
+ bool _closeOnTextTick;
+#endif
Common::Mutex _mutex;
public: