aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2016-07-16 20:14:27 -0300
committerjackpoz <giacomopoz@gmail.com>2016-08-10 18:40:58 +0200
commitf915ab2c86896f8878c2b292708c3f14c59dc35f (patch)
treed4c9a5e1183eb9521cd4aa1b9d95f058e0296dde
parentfe03c9a45ed1b2a36dcfff98fbb97f5ba6fac3c8 (diff)
Core/Account: Fix race condition in AccountMgr::UpdateAccountAccess
(cherry picked from commit 6c0b98f24c6aaf425fe654a4d44146e097352606)
-rw-r--r--src/server/game/Accounts/AccountMgr.cpp9
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