diff options
| author | Machiavelli <machiavelli.trinity@gmail.com> | 2011-05-21 14:24:46 +0200 |
|---|---|---|
| committer | Machiavelli <machiavelli.trinity@gmail.com> | 2011-05-21 14:24:46 +0200 |
| commit | 59c0670f442f6beb875c24cedd2bd8dba6fdd1f0 (patch) | |
| tree | 21f51f9ee6e31b106f0bd674589553e9091eb430 /src/server/game/Server/Protocol | |
| parent | c3778487f07752c425cef98fa496cda450d46f9b (diff) | |
Core/DBLayer: Fix possible transaction deadlock in HandleMailReturnToSender opcode
Diffstat (limited to 'src/server/game/Server/Protocol')
| -rwxr-xr-x | src/server/game/Server/Protocol/Handlers/MailHandler.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
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); } |
