aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2016-07-16 20:14:27 -0300
committerariel- <ariel-@users.noreply.github.com>2016-07-16 20:17:16 -0300
commit6c0b98f24c6aaf425fe654a4d44146e097352606 (patch)
treee509dee6a8fbd08749cf6c8e1e85ac16c29eed24 /src
parent63e62117ea339e6d76958b13bba8ec7ed99b7616 (diff)
Core/Account: Fix race condition in AccountMgr::UpdateAccountAccess
Diffstat (limited to 'src')
-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 1b93d072fb6..fa3e8818fe0 100644
--- a/src/server/game/Accounts/AccountMgr.cpp
+++ b/src/server/game/Accounts/AccountMgr.cpp
@@ -487,19 +487,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
@@ -509,8 +510,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