[Scummvm-cvs-logs] SF.net SVN: scummvm:[42113] scummvm/trunk/engines/sci/sfx/iterator.cpp
wjpalenstijn at users.sourceforge.net
wjpalenstijn at users.sourceforge.net
Sun Jul 5 03:16:53 CEST 2009
Revision: 42113
http://scummvm.svn.sourceforge.net/scummvm/?rev=42113&view=rev
Author: wjpalenstijn
Date: 2009-07-05 01:16:53 +0000 (Sun, 05 Jul 2009)
Log Message:
-----------
When creating a CleanupSongIterator, transfer death listeners to it
Modified Paths:
--------------
scummvm/trunk/engines/sci/sfx/iterator.cpp
Modified: scummvm/trunk/engines/sci/sfx/iterator.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/iterator.cpp 2009-07-04 23:52:24 UTC (rev 42112)
+++ scummvm/trunk/engines/sci/sfx/iterator.cpp 2009-07-05 01:16:53 UTC (rev 42113)
@@ -1269,12 +1269,11 @@
}
}
-static void song_iterator_transfer_death_listeners(SongIterator *it, TeeSongIterator *old_client) {
- song_iterator_remove_death_listener(it, old_client);
+static void song_iterator_transfer_death_listeners(SongIterator *it, SongIterator *it_from) {
for (int i = 0; i < SONGIT_MAX_LISTENERS; ++i) {
- if (old_client->_deathListeners[i])
- song_iterator_add_death_listener(it, old_client->_deathListeners[i]);
- old_client->_deathListeners[i] = 0;
+ if (it_from->_deathListeners[i])
+ song_iterator_add_death_listener(it, it_from->_deathListeners[i]);
+ it_from->_deathListeners[i] = 0;
}
}
@@ -1514,6 +1513,7 @@
delete _children[TEE_LEFT].it;
_children[TEE_LEFT].it = 0;
old_it = _children[TEE_RIGHT].it;
+ song_iterator_remove_death_listener(old_it, this);
song_iterator_transfer_death_listeners(old_it, this);
delete this;
return old_it;
@@ -1521,6 +1521,7 @@
delete _children[TEE_RIGHT].it;
_children[TEE_RIGHT].it = 0;
old_it = _children[TEE_LEFT].it;
+ song_iterator_remove_death_listener(old_it, this);
song_iterator_transfer_death_listeners(old_it, this);
delete this;
return old_it;
@@ -1593,9 +1594,11 @@
** cleanup iterator */
int channel_mask = (*it)->channel_mask;
+ SongIterator *old_it = *it;
+ *it = new CleanupSongIterator(channel_mask);
+ song_iterator_transfer_death_listeners(*it, old_it);
if (mask & IT_READER_MAY_FREE)
- delete *it;
- *it = new CleanupSongIterator(channel_mask);
+ delete old_it;
retval = -9999; /* Continue */
}
} while (!( /* Until one of the following holds */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list