[Kde-games-devel] Review Request: Bugs 303142 - Ksirk crash when we exit and 305000 - ksirk crashing random times

Albert Astals Cid aacid at kde.org
Tue Sep 25 22:29:40 UTC 2012



> On Sept. 25, 2012, 10:18 p.m., Ian Wadham wrote:
> > That qDeleteAll() thing is deadly at times, it appears.  I believe it is a macro.  Does anyone here know what it expands to or how to find out?
> 
> Nemanja Hirsl wrote:
>     It can be found in qalgorithms.h:
>     
>     template <typename ForwardIterator>
>     Q_OUTOFLINE_TEMPLATE void qDeleteAll(ForwardIterator begin, ForwardIterator end)
>     {
>         while (begin != end) {
>             delete *begin;
>             ++begin;
>         }
>     }
>     
>     template <typename Container>
>     inline void qDeleteAll(const Container &c)
>     {
>         qDeleteAll(c.begin(), c.end());
>     }

Grep is your friend

qalgorithms.h

template <typename ForwardIterator>
Q_OUTOFLINE_TEMPLATE void qDeleteAll(ForwardIterator begin, ForwardIterator end)
{
    while (begin != end) {
        delete *begin;
        ++begin;
    }
}

template <typename Container>
inline void qDeleteAll(const Container &c)
{
    qDeleteAll(c.begin(), c.end());
}

Plain iteration, there's nothing evil in it.


- Albert


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://svn.reviewboard.kde.org/r/7046/#review10967
-----------------------------------------------------------


On Sept. 25, 2012, 9:55 p.m., Nemanja Hirsl wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://svn.reviewboard.kde.org/r/7046/
> -----------------------------------------------------------
> 
> (Updated Sept. 25, 2012, 9:55 p.m.)
> 
> 
> Review request for KDE Games.
> 
> 
> Description
> -------
> 
> The analysis is the same as for bug 304362 and review: https://svn.reviewboard.kde.org/r/7045/
> qDeleteAll crashes because of invalid iterators.
> This time, qDeleteAll is called from libkdegames.
> 
> 
> Diffs
> -----
> 
>   /trunk/KDE/kdegames/libkdegames/libkdegamesprivate/kgame/kgame.cpp 1309567 
> 
> Diff: http://svn.reviewboard.kde.org/r/7046/diff/
> 
> 
> Testing
> -------
> 
> 1. New local game with 5 players
> 2. During the game, press 'x' to exit the game.
> 3. Game crashes with backtraces attached to bugs in summary.
> Debug logs:
> ksirk(9517) Ksirk::GameLogic::GameAutomaton::~GameAutomaton:
> ksirk(9517)/libkdegames (KGame) KGame::~KGame:
> ksirk(9517) Ksirk::GameLogic::AIPlayer::~AIPlayer: "Baudouin"
> ksirk(9517)/libkdegames (KGame) KPlayer::~KPlayer: : this= KPlayer(0x4304c30) , id= 1025
> ksirk(9517)/libkdegames (KGame) KGameIO::~KGameIO: : this= KGameIO(0x6b1f480)
> ksirk(9517)/libkdegames (KGame) KPlayer::removeGameIO: : KGameIO(0x6b1f480) delete= false
> ksirk(9517)/libkdegames (KGame) KGame::playerDeleted: : id ( 1025 ) to be removed KPlayer(0x4304c30)
> ksirk(9517)/libkdegames (KGame) KGame::systemRemovePlayer:
> ksirk(9517)/libkdegames (KGame) KGame::systemRemove: : Player ( 1025 ) to be removed KPlayer(0x4304c30)
> ksirk(9517)/libkdegames (KGame) KGame::playerDeleted: : sending IdRemovePlayer  1025
> ksirk(9517)/libkdegames (KGame) KPlayer::~KPlayer: done
> ksirk(9517) Ksirk::GameLogic::AIPlayer::~AIPlayer: "De Gaulle"
> ksirk(9517)/libkdegames (KGame) KPlayer::~KPlayer: : this= KPlayer(0x43070f0) , id= 1027
> ksirk(9517)/libkdegames (KGame) KGameIO::~KGameIO: : this= KGameIO(0x4770270)
> ksirk(9517)/libkdegames (KGame) KPlayer::removeGameIO: : KGameIO(0x4770270) delete= false
> ksirk(9517)/libkdegames (KGame) KGame::playerDeleted: : id ( 1027 ) to be removed KPlayer(0x43070f0)
> ksirk(9517)/libkdegames (KGame) KGame::systemRemovePlayer:
> ksirk(9517)/libkdegames (KGame) KGame::systemRemove: : Player ( 1027 ) to be removed KPlayer(0x43070f0)
> ksirk(9517)/libkdegames (KGame) KGame::playerDeleted: : sending IdRemovePlayer  1027
> ksirk(9517)/libkdegames (KGame) KPlayer::~KPlayer: done
> ksirk(9517)/libkdegames (KGame) KPlayer::~KPlayer: : this= KPlayer(0x4313130) , id= 1029
> ksirk(9517)/libkdegames (KGame) KGameIO::~KGameIO: : this= KGameIO(0x430c730)
> ksirk(9517)/libkdegames (KGame) KPlayer::removeGameIO: : KGameIO(0x430c730) delete= false
> ksirk(9517)/libkdegames (KGame) KGame::playerDeleted: : id ( 1029 ) to be removed KPlayer(0x4313130)
> ksirk(9517)/libkdegames (KGame) KGame::systemRemovePlayer:
> ksirk(9517)/libkdegames (KGame) KGame::systemRemove: : Player ( 1029 ) to be removed KPlayer(0x4313130)
> ksirk(9517)/libkdegames (KGame) KGame::playerDeleted: : sending IdRemovePlayer  1029
> ksirk(9517)/libkdegames (KGame) KPlayer::~KPlayer: done
> KCrash: Application 'ksirk' crashing...
> 
> 
> After patch applied, same test case is not crashing anymore.
> 
> Debug logs:
> ksirk(9848) Ksirk::GameLogic::GameAutomaton::~GameAutomaton:
> ksirk(9848)/libkdegames (KGame) KGame::~KGame:
> ksirk(9848) Ksirk::GameLogic::AIPlayer::~AIPlayer: "Baudouin"
> ksirk(9848)/libkdegames (KGame) KPlayer::~KPlayer: : this= KPlayer(0x3ff4120) , id= 1025
> ksirk(9848)/libkdegames (KGame) KGameIO::~KGameIO: : this= KGameIO(0x3ff4700)
> ksirk(9848)/libkdegames (KGame) KPlayer::removeGameIO: : KGameIO(0x3ff4700) delete= false
> ksirk(9848)/libkdegames (KGame) KGame::playerDeleted: : id ( 1025 ) to be removed KPlayer(0x3ff4120)
> ksirk(9848)/libkdegames (KGame) KGame::systemRemovePlayer:
> ksirk(9848)/libkdegames (KGame) KGame::systemRemove: : Player ( 1025 ) to be removed KPlayer(0x3ff4120)
> ksirk(9848)/libkdegames (KGame) KGame::playerDeleted: : sending IdRemovePlayer  1025
> ksirk(9848)/libkdegames (KGame) KPlayer::~KPlayer: done
> ksirk(9848) Ksirk::GameLogic::AIPlayer::~AIPlayer: "de Gaulle"
> ksirk(9848)/libkdegames (KGame) KPlayer::~KPlayer: : this= KPlayer(0x40330f0) , id= 1026
> ksirk(9848)/libkdegames (KGame) KGameIO::~KGameIO: : this= KGameIO(0x3ff4590)
> ksirk(9848)/libkdegames (KGame) KPlayer::removeGameIO: : KGameIO(0x3ff4590) delete= false
> ksirk(9848)/libkdegames (KGame) KGame::playerDeleted: : id ( 1026 ) to be removed KPlayer(0x40330f0)
> ksirk(9848)/libkdegames (KGame) KGame::systemRemovePlayer:
> ksirk(9848)/libkdegames (KGame) KGame::systemRemove: : Player ( 1026 ) to be removed KPlayer(0x40330f0)
> ksirk(9848)/libkdegames (KGame) KGame::playerDeleted: : sending IdRemovePlayer  1026
> ksirk(9848)/libkdegames (KGame) KPlayer::~KPlayer: done
> ksirk(9848) Ksirk::GameLogic::AIPlayer::~AIPlayer: "Victor Emmanuel"
> ksirk(9848)/libkdegames (KGame) KPlayer::~KPlayer: : this= KPlayer(0x4032be0) , id= 1027
> ksirk(9848)/libkdegames (KGame) KGameIO::~KGameIO: : this= KGameIO(0x4ab86e0)
> ksirk(9848)/libkdegames (KGame) KPlayer::removeGameIO: : KGameIO(0x4ab86e0) delete= false
> ksirk(9848)/libkdegames (KGame) KGame::playerDeleted: : id ( 1027 ) to be removed KPlayer(0x4032be0)
> ksirk(9848)/libkdegames (KGame) KGame::systemRemovePlayer:
> ksirk(9848)/libkdegames (KGame) KGame::systemRemove: : Player ( 1027 ) to be removed KPlayer(0x4032be0)
> ksirk(9848)/libkdegames (KGame) KGame::playerDeleted: : sending IdRemovePlayer  1027
> ksirk(9848)/libkdegames (KGame) KPlayer::~KPlayer: done
> ksirk(9848) Ksirk::GameLogic::AIPlayer::~AIPlayer: "Akihito"
> ksirk(9848)/libkdegames (KGame) KPlayer::~KPlayer: : this= KPlayer(0x4039450) , id= 1028
> ksirk(9848)/libkdegames (KGame) KGameIO::~KGameIO: : this= KGameIO(0x4033f20)
> ksirk(9848)/libkdegames (KGame) KPlayer::removeGameIO: : KGameIO(0x4033f20) delete= false
> ksirk(9848)/libkdegames (KGame) KGame::playerDeleted: : id ( 1028 ) to be removed KPlayer(0x4039450)
> ksirk(9848)/libkdegames (KGame) KGame::systemRemovePlayer:
> ksirk(9848)/libkdegames (KGame) KGame::systemRemove: : Player ( 1028 ) to be removed KPlayer(0x4039450)
> ksirk(9848)/libkdegames (KGame) KGame::playerDeleted: : sending IdRemovePlayer  1028
> ksirk(9848)/libkdegames (KGame) KPlayer::~KPlayer: done
> ksirk(9848)/libkdegames (KGame) KPlayer::~KPlayer: : this= KPlayer(0x4034330) , id= 1029
> ksirk(9848)/libkdegames (KGame) KGameIO::~KGameIO: : this= KGameIO(0x403ac40)
> ksirk(9848)/libkdegames (KGame) KPlayer::removeGameIO: : KGameIO(0x403ac40) delete= false
> ksirk(9848)/libkdegames (KGame) KGame::playerDeleted: : id ( 1029 ) to be removed KPlayer(0x4034330)
> ksirk(9848)/libkdegames (KGame) KGame::systemRemovePlayer:
> ksirk(9848)/libkdegames (KGame) KGame::systemRemove: : Player ( 1029 ) to be removed KPlayer(0x4034330)
> ksirk(9848)/libkdegames (KGame) KGame::playerDeleted: : sending IdRemovePlayer  1029
> ksirk(9848)/libkdegames (KGame) KPlayer::~KPlayer: done
> ksirk(9848)/libkdegames (KGame) KGame::~KGame: done
> ksirk(9848)/libkdegames (KGame) KGameNetwork::~KGameNetwork: this= KGameNetwork(0x20217d0)
> ksirk(9848)/libkdegames (KGame) KMessageServer::~KMessageServer: this= KMessageServer(0x1fc0210)
> ksirk(9848)/libkdegames (KGame) KMessageServer::Debug: ------------------ KMESSAGESERVER -----------------------
> ksirk(9848)/libkdegames (KGame) KMessageServer::Debug: MaxClients :    -1
> ksirk(9848)/libkdegames (KGame) KMessageServer::Debug: NoOfClients :   1
> ksirk(9848)/libkdegames (KGame) KMessageServer::Debug: ---------------------------------------------------
> ksirk(9848)/libkdegames (KGame) KMessageClient::removeBrokenConnection: : timer single shot for removeBrokenConnection KMessageClient(0x1fbfcf0)
> ksirk(9848)/libkdegames (KGame) KMessageServer::~KMessageServer: done
> ksirk(9848) Ksirk::FightArena::~FightArena:
> ksirk(9848)/libkdegames (KGame) KGameChat::~KGameChat:
> 
> 
> Thanks,
> 
> Nemanja Hirsl
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-games-devel/attachments/20120925/4fec17f8/attachment-0001.html>


More information about the kde-games-devel mailing list