diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2016-07-16 20:14:27 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2016-07-16 20:17:16 -0300 |
| commit | 6c0b98f24c6aaf425fe654a4d44146e097352606 (patch) | |
| tree | e509dee6a8fbd08749cf6c8e1e85ac16c29eed24 /src | |
| parent | 63e62117ea339e6d76958b13bba8ec7ed99b7616 (diff) | |
Core/Account: Fix race condition in AccountMgr::UpdateAccountAccess
Diffstat (limited to 'src')
| -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 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 |
