From bd8a601e17e321f069ba09262f34ce51bd7ceb68 Mon Sep 17 00:00:00 2001 From: Joe4evr Date: Mon, 29 Aug 2016 16:17:52 +0200 Subject: [PATCH] Replace locking on 'this'. --- src/Discord.Net.Commands/Map/CommandMap.cs | 7 ++++--- src/Discord.Net.Commands/Map/CommandMapNode.cs | 5 +++-- .../WebSocket/Entities/Users/SocketGlobalUser.cs | 9 +++++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Discord.Net.Commands/Map/CommandMap.cs b/src/Discord.Net.Commands/Map/CommandMap.cs index 66cce7406..a5a1f8bc4 100644 --- a/src/Discord.Net.Commands/Map/CommandMap.cs +++ b/src/Discord.Net.Commands/Map/CommandMap.cs @@ -7,6 +7,7 @@ namespace Discord.Commands internal class CommandMap { static readonly char[] _whitespaceChars = new char[] { ' ', '\r', '\n' }; + private readonly object _lockObj = new object(); private readonly ConcurrentDictionary _nodes; @@ -27,7 +28,7 @@ namespace Discord.Commands else name = text.Substring(0, nextSpace); - lock (this) + lock (_lockObj) { var nextNode = _nodes.GetOrAdd(name, x => new CommandMapNode(x)); nextNode.AddCommand(nextSpace == -1 ? "" : text, nextSpace + 1, command); @@ -46,7 +47,7 @@ namespace Discord.Commands else name = text.Substring(0, nextSpace); - lock (this) + lock (_lockObj) { CommandMapNode nextNode; if (_nodes.TryGetValue(name, out nextNode)) @@ -69,7 +70,7 @@ namespace Discord.Commands else name = text.Substring(0, nextSpace); - lock (this) + lock (_lockObj) { CommandMapNode nextNode; if (_nodes.TryGetValue(name, out nextNode)) diff --git a/src/Discord.Net.Commands/Map/CommandMapNode.cs b/src/Discord.Net.Commands/Map/CommandMapNode.cs index 1ce0b4724..5ef42544e 100644 --- a/src/Discord.Net.Commands/Map/CommandMapNode.cs +++ b/src/Discord.Net.Commands/Map/CommandMapNode.cs @@ -8,6 +8,7 @@ namespace Discord.Commands { private readonly ConcurrentDictionary _nodes; private readonly string _name; + private readonly object _lockObj = new object(); private ImmutableArray _commands; public bool IsEmpty => _commands.Length == 0 && _nodes.Count == 0; @@ -24,7 +25,7 @@ namespace Discord.Commands int nextSpace = text.IndexOf(' ', index); string name; - lock (this) + lock (_lockObj) { if (text == "") _commands = _commands.Add(command); @@ -45,7 +46,7 @@ namespace Discord.Commands int nextSpace = text.IndexOf(' ', index); string name; - lock (this) + lock (_lockObj) { if (text == "") _commands = _commands.Remove(command); diff --git a/src/Discord.Net/WebSocket/Entities/Users/SocketGlobalUser.cs b/src/Discord.Net/WebSocket/Entities/Users/SocketGlobalUser.cs index 3835dcc46..3b23f7985 100644 --- a/src/Discord.Net/WebSocket/Entities/Users/SocketGlobalUser.cs +++ b/src/Discord.Net/WebSocket/Entities/Users/SocketGlobalUser.cs @@ -8,6 +8,7 @@ namespace Discord.WebSocket internal class SocketGlobalUser : User, ISocketUser { internal override bool IsAttached => true; + private readonly object _lockObj = new object(); private ushort _references; @@ -25,13 +26,13 @@ namespace Discord.WebSocket { checked { - lock (this) + lock (_lockObj) _references++; } } public void RemoveRef(DiscordSocketClient discord) { - lock (this) + lock (_lockObj) { if (--_references == 0) discord.RemoveUser(Id); @@ -40,14 +41,14 @@ namespace Discord.WebSocket public override void Update(Model model, UpdateSource source) { - lock (this) + lock (_lockObj) base.Update(model, source); } public void Update(PresenceModel model, UpdateSource source) { //Race conditions are okay here. Multiple shards racing already cant guarantee presence in order. - //lock (this) + //lock (_lockObj) //{ var game = model.Game != null ? new Game(model.Game) : null; Presence = new Presence(game, model.Status);