diff options
author | ariel- <ariel-@users.noreply.github.com> | 2016-07-16 20:14:27 -0300 |
---|---|---|
committer | jackpoz <giacomopoz@gmail.com> | 2016-08-10 18:40:58 +0200 |
commit | f915ab2c86896f8878c2b292708c3f14c59dc35f (patch) | |
tree | d4c9a5e1183eb9521cd4aa1b9d95f058e0296dde /src/server/game/Accounts/AccountMgr.cpp | |
parent | fe03c9a45ed1b2a36dcfff98fbb97f5ba6fac3c8 (diff) |
Core/Account: Fix race condition in AccountMgr::UpdateAccountAccess
(cherry picked from commit 6c0b98f24c6aaf425fe654a4d44146e097352606)
Diffstat (limited to 'src/server/game/Accounts/AccountMgr.cpp')
-rw-r--r-- | src/server/game/Accounts/AccountMgr.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp index dceb8afbb1e..6c40bd62a02 100644 --- a/src/server/game/Accounts/AccountMgr.cpp +++ b/src/server/game/Accounts/AccountMgr.cpp @@ -501,19 +501,20 @@ void AccountMgr::UpdateAccountAccess(rbac::RBACData* rbac, uint32 accountId, uin if (rbac && securityLevel == rbac->GetSecurityLevel()) rbac->SetSecurityLevel(securityLevel); + SQLTransaction trans = LoginDatabase.BeginTransaction(); // Delete old security level from DB if (realmId == -1) { PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_ACCOUNT_ACCESS); stmt->setUInt32(0, accountId); - LoginDatabase.Execute(stmt); + trans->Append(stmt); } else { PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_ACCOUNT_ACCESS_BY_REALM); stmt->setUInt32(0, accountId); stmt->setUInt32(1, realmId); - LoginDatabase.Execute(stmt); + trans->Append(stmt); } // Add new security level @@ -523,8 +524,10 @@ void AccountMgr::UpdateAccountAccess(rbac::RBACData* rbac, uint32 accountId, uin stmt->setUInt32(0, accountId); stmt->setUInt8(1, securityLevel); stmt->setInt32(2, realmId); - LoginDatabase.Execute(stmt); + trans->Append(stmt); } + + LoginDatabase.CommitTransaction(trans); } rbac::RBACPermission const* AccountMgr::GetRBACPermission(uint32 permissionId) const |