[smuxi/stable: 7/7] Engine: fixed thread-safety of UserConfig.get_Item()
- From: Mirco M. M. Bauer <mmmbauer src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [smuxi/stable: 7/7] Engine: fixed thread-safety of UserConfig.get_Item()
- Date: Tue, 2 Jun 2015 19:26:53 +0000 (UTC)
commit 44bfda284872a42f12f3530b341ee8962d07f506
Author: Mirco Bauer <meebey meebey net>
Date: Tue Jun 2 21:24:22 2015 +0200
Engine: fixed thread-safety of UserConfig.get_Item()
2015-06-02 20:37:14,520 [Main] INFO Smuxi.Frontend.Gnome.CommandLineInterface - Opening the link...
2015-06-02 20:37:14,848 [Main] ERROR Smuxi.Frontend.Gnome.Frontend - ShowException(): Exception:
System.ArgumentException: Key duplication when adding: Servers/Servers
at System.Collections.Hashtable.PutImpl (System.Object key, System.Object value, Boolean overwrite)
[0x00000] in <filename unknown>:0
at System.Collections.Hashtable.Add (System.Object key, System.Object value) [0x00000] in <filename
unknown>:0
at Smuxi.Engine.UserConfig.get_Item (System.String key) [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) Smuxi.Engine.UserConfig:get_Item (string)
at Smuxi.Engine.ServerListController.GetServerList () [0x00000] in <filename unknown>:0
at Smuxi.Engine.ServerListController.GetServerByNetwork (System.String network) [0x00000] in
<filename unknown>:0
at Smuxi.Frontend.Gnome.Frontend.TryOpenChatLink (System.Uri link) [0x00000] in <filename unknown>:0
at Smuxi.Frontend.Gnome.Frontend.OpenLink (System.Uri link) [0x00000] in <filename unknown>:0
at Smuxi.Frontend.Gnome.CommandLineInterface+<OpenLink>c__AnonStorey1.<>m__1 (System.Object o,
System.EventArgs e) [0x00000] in <filename unknown>:0
at Gtk.Application+InvokeCB.Invoke () [0x00000] in <filename unknown>:0
at GLib.Timeout+TimeoutProxy.Handler () [0x00000] in <filename unknown>:0
src/Engine/Config/UserConfig.cs | 13 ++++++++-----
1 files changed, 8 insertions(+), 5 deletions(-)
---
diff --git a/src/Engine/Config/UserConfig.cs b/src/Engine/Config/UserConfig.cs
index 846b3dc..789e839 100644
--- a/src/Engine/Config/UserConfig.cs
+++ b/src/Engine/Config/UserConfig.cs
@@ -1,7 +1,7 @@
/*
* Smuxi - Smart MUltipleXed Irc
*
- * Copyright (c) 2005-2006, 2010-2011, 2013 Mirco Bauer <meebey meebey net>
+ * Copyright (c) 2005-2006, 2010-2011, 2013, 2015 Mirco Bauer <meebey meebey net>
*
* Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
*
@@ -55,7 +55,10 @@ namespace Smuxi.Engine
}
}
}
-
+
+ /// <remarks>
+ /// This property is thread-safe.
+ /// </remarks>
public object this[string key]
{
get {
@@ -77,7 +80,7 @@ namespace Smuxi.Engine
obj = _Config[_UserPrefix + key];
if (obj != null) {
if (IsCaching) {
- _Cache.Add(key, obj);
+ _Cache[key] = obj;
}
return obj;
}
@@ -89,7 +92,7 @@ namespace Smuxi.Engine
}
#endif
if (IsCaching) {
- _Cache.Add(key, obj);
+ _Cache[key] = obj;
}
return obj;
@@ -182,7 +185,7 @@ namespace Smuxi.Engine
var start = DateTime.UtcNow;
var conf = _Config.GetAll();
- var cache = new Hashtable(conf.Count);
+ var cache = Hashtable.Synchronized(new Hashtable(conf.Count));
foreach (var entry in conf) {
if (!entry.Key.StartsWith(_UserPrefix)) {
// no need to cache values of other users
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]