diff --git a/src/servers/app/server/CursorManager.cpp b/src/servers/app/server/CursorManager.cpp index 19443f656f..661fdfcc6f 100644 --- a/src/servers/app/server/CursorManager.cpp +++ b/src/servers/app/server/CursorManager.cpp @@ -156,16 +156,21 @@ void CursorManager::DeleteCursor(int32 token) void CursorManager::RemoveAppCursors(team_id team) { Lock(); - - ServerCursor *temp; - for(int32 i=0; iCountItems();i++) + + int32 i=0; + ServerCursor *temp=(ServerCursor*)fCursorList->ItemAt(i); + while(temp) { - temp=(ServerCursor*)fCursorList->ItemAt(i); if(temp && temp->OwningTeam()==team) { fCursorList->RemoveItem(i); delete temp; } + else + { + i++; + } + temp=(ServerCursor*)fCursorList->ItemAt(i); } Unlock(); } diff --git a/src/servers/app/server/ServerApp.cpp b/src/servers/app/server/ServerApp.cpp index fa637b837d..80369c16ce 100644 --- a/src/servers/app/server/ServerApp.cpp +++ b/src/servers/app/server/ServerApp.cpp @@ -153,9 +153,11 @@ ServerApp::~ServerApp(void) delete fMsgSender; fMsgSender=NULL; - - if(fAppCursor) - delete fAppCursor; + + // This shouldn't be necessary -- all cursors owned by the app + // should be cleaned up by RemoveAppCursors +// if(fAppCursor) +// delete fAppCursor; cursormanager->RemoveAppCursors(fClientTeamID); delete_sem(fLockSem);