From 6e6685a53de4f0f3deb4414f59153b2d6f673b6b Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Tue, 10 Dec 2013 22:22:51 +0200 Subject: FULLPIPE: Remove premature optimization in GlobalMessageQueueList::compact() This fixes freeze in intro and most probably tons of other stuff. Kudos go to eriktorbjorn for debugging it. --- engines/fullpipe/messages.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'engines/fullpipe/messages.cpp') diff --git a/engines/fullpipe/messages.cpp b/engines/fullpipe/messages.cpp index 6af3f731df..c28365acc5 100644 --- a/engines/fullpipe/messages.cpp +++ b/engines/fullpipe/messages.cpp @@ -557,16 +557,33 @@ void GlobalMessageQueueList::disableQueueById(int id) { } int GlobalMessageQueueList::compact() { + int *useList = new int[size() + 2]; + + for (uint i = 0; i < size() + 2; i++) + useList[i] = 0; + for (uint i = 0; i < size();) { if (((MessageQueue *)_storage[i])->_isFinished) { disableQueueById(_storage[i]->_id); remove_at(i); } else { + if (_storage[i]->_id < size() + 2) + useList[_storage[i]->_id] = 1; i++; } } - return size() + 1; + uint i; + + for (i = 1; i < size() + 2; i++) { + if (!useList[i]) { + delete [] useList; + + return i; + } + } + + return i; } void GlobalMessageQueueList::addMessageQueue(MessageQueue *msg) { -- cgit v1.2.3