From 59c0670f442f6beb875c24cedd2bd8dba6fdd1f0 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Sat, 21 May 2011 14:24:46 +0200 Subject: Core/DBLayer: Fix possible transaction deadlock in HandleMailReturnToSender opcode --- src/server/game/Server/Protocol/Handlers/MailHandler.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/server/game/Server') diff --git a/src/server/game/Server/Protocol/Handlers/MailHandler.cpp b/src/server/game/Server/Protocol/Handlers/MailHandler.cpp index a6bbb182fdf..2e4dbe799a7 100755 --- a/src/server/game/Server/Protocol/Handlers/MailHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/MailHandler.cpp @@ -365,7 +365,6 @@ void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data) SQLTransaction trans = CharacterDatabase.BeginTransaction(); trans->PAppend("DELETE FROM mail WHERE id = '%u'", mailId); // needed? trans->PAppend("DELETE FROM mail_items WHERE mail_id = '%u'", mailId); - CharacterDatabase.CommitTransaction(trans); pl->RemoveMail(mailId); // only return mail if the player exists (and delete if not existing) @@ -390,9 +389,11 @@ void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data) pl->RemoveMItem(itr2->item_guid); } } - draft.AddMoney(m->money).SendReturnToSender(GetAccountId(), m->receiver, m->sender); + draft.AddMoney(m->money).SendReturnToSender(GetAccountId(), m->receiver, m->sender, trans); } + CharacterDatabase.CommitTransaction(trans); + delete m; //we can deallocate old mail pl->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, MAIL_OK); } -- cgit v1.2.3