aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorMachiavelli <machiavelli.trinity@gmail.com>2011-05-21 14:24:46 +0200
committerMachiavelli <machiavelli.trinity@gmail.com>2011-05-21 14:24:46 +0200
commit59c0670f442f6beb875c24cedd2bd8dba6fdd1f0 (patch)
tree21f51f9ee6e31b106f0bd674589553e9091eb430 /src/server/game/Server
parentc3778487f07752c425cef98fa496cda450d46f9b (diff)
Core/DBLayer: Fix possible transaction deadlock in HandleMailReturnToSender opcode
Diffstat (limited to 'src/server/game/Server')
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/MailHandler.cpp5
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);
}