ソースを参照

bug #1592

(cherry picked from commit fb5e3bcac2)
tags/v0.8.6.7
Shaun 3年前
committed by Big Bad Waffle
コミット
36527333ee
1個のファイルの変更39行の追加0行の削除
  1. +39
    -0
      src/server/components/auth.js

+ 39
- 0
src/server/components/auth.js ファイルの表示

@@ -1,3 +1,4 @@
//Imports
const bcrypt = require('bcrypt-nodejs');
const messages = require('../misc/messages');
const skins = require('../config/skins');
@@ -10,6 +11,40 @@ const events = require('../misc/events');

const checkLoginRewards = require('./auth/checkLoginRewards');

//This section of code is in charge of ensuring that we only ever create one account at a time,
// since we don't have a read/write lock on the characters table, we have to address it in code
const createLockBuffer = [];
const getCreateLock = async () => {
const releaseLock = res => {
createLockBuffer.spliceWhere(r => r === res);

const nextEntry = createLockBuffer[0];

if (!nextEntry)
return;

nextEntry.takeLock();
};

const promise = new Promise(async res => {
let lockEntry = {};
lockEntry.takeLock = res.bind(null, releaseLock.bind(null, lockEntry));

if (!createLockBuffer.length) {
createLockBuffer.push(lockEntry);

lockEntry.takeLock();

return;
}

createLockBuffer.push(lockEntry);
});

return promise;
};

//Component Definition
module.exports = {
type: 'auth',

@@ -348,6 +383,8 @@ module.exports = {
},

createCharacter: async function (msg) {
const releaseCreateLock = await getCreateLock();

let data = msg.data;
let name = data.name;

@@ -435,6 +472,8 @@ module.exports = {
serialize: true
});

releaseCreateLock();

this.initTracker();

this.play({


読み込み中…
キャンセル
保存