OSDN Git Service

コレクションを列挙中に削除しているのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 8 Nov 2015 07:51:00 +0000 (16:51 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 8 Nov 2015 15:04:14 +0000 (00:04 +0900)
TrotiNet/TcpServer.cs

index 9b39857..2bc15e3 100644 (file)
@@ -15,6 +15,7 @@
 \r
 using System;\r
 using System.Collections.Generic;\r
+using System.Linq;\r
 using System.Net;\r
 using System.Net.Sockets;\r
 using System.Runtime.CompilerServices;\r
@@ -208,19 +209,17 @@ namespace TrotiNet
             {\r
                 lock (ConnectedSockets)\r
                 {\r
-                    foreach (var kv in ConnectedSockets)\r
+                    try\r
+                    {\r
+                        foreach (var id in\r
+                            (from c in ConnectedSockets\r
+                             where c.Value?.IsSocketDead() ?? true\r
+                             select c.Key).ToArray())\r
+                            ConnectedSockets.Remove(id);\r
+                    }\r
+                    catch (Exception e)\r
                     {\r
-                        try\r
-                        {\r
-                            int id = kv.Key;\r
-                            HttpSocket state = kv.Value;\r
-                            if (state == null || state.IsSocketDead())\r
-                                ConnectedSockets.Remove(id);\r
-                        }\r
-                        catch (Exception e)\r
-                        {\r
-                            log.Error(e);\r
-                        }\r
+                        log.Error(e);\r
                     }\r
                 }\r
             }\r