aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Communications/OGS1/OGS1GridServices.cs')
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1GridServices.cs198
1 files changed, 133 insertions, 65 deletions
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index 73cd061..8429d00 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -50,6 +50,7 @@ namespace OpenSim.Region.Communications.OGS1
50 private LocalBackEndServices m_localBackend = new LocalBackEndServices(); 50 private LocalBackEndServices m_localBackend = new LocalBackEndServices();
51 private Dictionary<ulong, RegionInfo> m_remoteRegionInfoCache = new Dictionary<ulong, RegionInfo>(); 51 private Dictionary<ulong, RegionInfo> m_remoteRegionInfoCache = new Dictionary<ulong, RegionInfo>();
52 private List<SimpleRegionInfo> m_knownRegions = new List<SimpleRegionInfo>(); 52 private List<SimpleRegionInfo> m_knownRegions = new List<SimpleRegionInfo>();
53 private Dictionary<ulong, int> m_deadRegionCache = new Dictionary<ulong, int>();
53 private Dictionary<string, string> m_queuedGridSettings = new Dictionary<string, string>(); 54 private Dictionary<string, string> m_queuedGridSettings = new Dictionary<string, string>();
54 55
55 public BaseHttpServer httpListener; 56 public BaseHttpServer httpListener;
@@ -499,79 +500,99 @@ namespace OpenSim.Region.Communications.OGS1
499 500
500 public bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) 501 public bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
501 { 502 {
502 RegionInfo regInfo = null; 503 int failures = 0;
503 try 504 lock (m_deadRegionCache)
504 { 505 {
505 if (m_localBackend.ChildAgentUpdate(regionHandle, cAgentData)) 506 if (m_deadRegionCache.ContainsKey(regionHandle))
506 { 507 {
507 return true; 508 failures = m_deadRegionCache[regionHandle];
508 } 509 }
509 510 }
510 regInfo = RequestNeighbourInfo(regionHandle); 511 if (failures <= 3)
511 if (regInfo != null) 512 {
513 RegionInfo regInfo = null;
514 try
512 { 515 {
513 //don't want to be creating a new link to the remote instance every time like we are here 516 if (m_localBackend.ChildAgentUpdate(regionHandle, cAgentData))
514 bool retValue = false;
515
516
517 OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting) Activator.GetObject(
518 typeof (OGS1InterRegionRemoting),
519 "tcp://" + regInfo.RemotingAddress +
520 ":" + regInfo.RemotingPort +
521 "/InterRegions");
522
523 if (remObject != null)
524 { 517 {
525 retValue = remObject.ChildAgentUpdate(regionHandle, cAgentData); 518 return true;
526 } 519 }
527 else 520
521 regInfo = RequestNeighbourInfo(regionHandle);
522 if (regInfo != null)
528 { 523 {
529 Console.WriteLine("remoting object not found"); 524 //don't want to be creating a new link to the remote instance every time like we are here
525 bool retValue = false;
526
527
528 OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting)Activator.GetObject(
529 typeof(OGS1InterRegionRemoting),
530 "tcp://" + regInfo.RemotingAddress +
531 ":" + regInfo.RemotingPort +
532 "/InterRegions");
533
534 if (remObject != null)
535 {
536 retValue = remObject.ChildAgentUpdate(regionHandle, cAgentData);
537 }
538 else
539 {
540 Console.WriteLine("remoting object not found");
541 }
542 remObject = null;
543 //MainLog.Instance.Verbose("INTER",
544 //gdebugRegionName +
545 //": OGS1 tried to Update Child Agent data on outside region and got " +
546 //retValue.ToString());
547
548 return retValue;
530 } 549 }
531 remObject = null; 550 NoteDeadRegion(regionHandle);
532 MainLog.Instance.Verbose("INTER",
533 gdebugRegionName +
534 ": OGS1 tried to Update Child Agent data on outside region and got " +
535 retValue.ToString());
536 551
537 return retValue; 552 return false;
553 }
554 catch (RemotingException e)
555 {
556 NoteDeadRegion(regionHandle);
557 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " +
558 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
559 MainLog.Instance.Debug(e.ToString());
560 return false;
561 }
562 catch (SocketException e)
563 {
564 NoteDeadRegion(regionHandle);
565 MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + " " +
566 regInfo.RegionLocX + "," + regInfo.RegionLocY);
567 MainLog.Instance.Debug(e.ToString());
568 return false;
569 }
570 catch (InvalidCredentialException e)
571 {
572 NoteDeadRegion(regionHandle);
573 MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " +
574 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
575 MainLog.Instance.Debug(e.ToString());
576 return false;
577 }
578 catch (AuthenticationException e)
579 {
580 NoteDeadRegion(regionHandle);
581 MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " +
582 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
583 MainLog.Instance.Debug(e.ToString());
584 return false;
585 }
586 catch (Exception e)
587 {
588 NoteDeadRegion(regionHandle);
589 MainLog.Instance.Debug(e.ToString());
590 return false;
538 } 591 }
539
540 return false;
541 }
542 catch (RemotingException e)
543 {
544 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName +
545 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
546 MainLog.Instance.Debug(e.ToString());
547 return false;
548 }
549 catch (SocketException e)
550 {
551 MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " +
552 regInfo.RegionLocX + "," + regInfo.RegionLocY);
553 MainLog.Instance.Debug(e.ToString());
554 return false;
555 }
556 catch (InvalidCredentialException e)
557 {
558 MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName +
559 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
560 MainLog.Instance.Debug(e.ToString());
561 return false;
562 }
563 catch (AuthenticationException e)
564 {
565 MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " +
566 regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
567 MainLog.Instance.Debug(e.ToString());
568 return false;
569 } 592 }
570 catch (Exception e) 593 else
571 { 594 {
572 MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName + 595 //MainLog.Instance.Verbose("INTERREGION", "Skipped Sending Child Update to a region because it failed too many times:" + regionHandle.ToString());
573 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
574 MainLog.Instance.Debug(e.ToString());
575 return false; 596 return false;
576 } 597 }
577 } 598 }
@@ -622,11 +643,12 @@ namespace OpenSim.Region.Communications.OGS1
622 return retValue; 643 return retValue;
623 644
624 } 645 }
625 646 NoteDeadRegion(regionHandle);
626 return false; 647 return false;
627 } 648 }
628 catch (RemotingException e) 649 catch (RemotingException e)
629 { 650 {
651 NoteDeadRegion(regionHandle);
630 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + 652 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName +
631 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); 653 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
632 MainLog.Instance.Debug(e.ToString()); 654 MainLog.Instance.Debug(e.ToString());
@@ -634,6 +656,7 @@ namespace OpenSim.Region.Communications.OGS1
634 } 656 }
635 catch (SocketException e) 657 catch (SocketException e)
636 { 658 {
659 NoteDeadRegion(regionHandle);
637 MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + 660 MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " +
638 regInfo.RegionLocX + "," + regInfo.RegionLocY); 661 regInfo.RegionLocX + "," + regInfo.RegionLocY);
639 MainLog.Instance.Debug(e.ToString()); 662 MainLog.Instance.Debug(e.ToString());
@@ -641,6 +664,7 @@ namespace OpenSim.Region.Communications.OGS1
641 } 664 }
642 catch (InvalidCredentialException e) 665 catch (InvalidCredentialException e)
643 { 666 {
667 NoteDeadRegion(regionHandle);
644 MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName + 668 MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName +
645 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); 669 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
646 MainLog.Instance.Debug(e.ToString()); 670 MainLog.Instance.Debug(e.ToString());
@@ -648,6 +672,7 @@ namespace OpenSim.Region.Communications.OGS1
648 } 672 }
649 catch (AuthenticationException e) 673 catch (AuthenticationException e)
650 { 674 {
675 NoteDeadRegion(regionHandle);
651 MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " + 676 MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " +
652 regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); 677 regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
653 MainLog.Instance.Debug(e.ToString()); 678 MainLog.Instance.Debug(e.ToString());
@@ -655,6 +680,7 @@ namespace OpenSim.Region.Communications.OGS1
655 } 680 }
656 catch (Exception e) 681 catch (Exception e)
657 { 682 {
683 NoteDeadRegion(regionHandle);
658 MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName + 684 MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName +
659 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); 685 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
660 MainLog.Instance.Debug(e.ToString()); 686 MainLog.Instance.Debug(e.ToString());
@@ -813,11 +839,12 @@ namespace OpenSim.Region.Communications.OGS1
813 839
814 return retValue; 840 return retValue;
815 } 841 }
816 842 NoteDeadRegion(regionHandle);
817 return false; 843 return false;
818 } 844 }
819 catch (RemotingException e) 845 catch (RemotingException e)
820 { 846 {
847 NoteDeadRegion(regionHandle);
821 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + 848 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName +
822 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); 849 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
823 MainLog.Instance.Debug(e.ToString()); 850 MainLog.Instance.Debug(e.ToString());
@@ -825,6 +852,7 @@ namespace OpenSim.Region.Communications.OGS1
825 } 852 }
826 catch (SocketException e) 853 catch (SocketException e)
827 { 854 {
855 NoteDeadRegion(regionHandle);
828 MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + 856 MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " +
829 regInfo.RegionLocX + "," + regInfo.RegionLocY); 857 regInfo.RegionLocX + "," + regInfo.RegionLocY);
830 MainLog.Instance.Debug(e.ToString()); 858 MainLog.Instance.Debug(e.ToString());
@@ -832,6 +860,7 @@ namespace OpenSim.Region.Communications.OGS1
832 } 860 }
833 catch (InvalidCredentialException e) 861 catch (InvalidCredentialException e)
834 { 862 {
863 NoteDeadRegion(regionHandle);
835 MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName + 864 MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName +
836 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); 865 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
837 MainLog.Instance.Debug(e.ToString()); 866 MainLog.Instance.Debug(e.ToString());
@@ -839,6 +868,7 @@ namespace OpenSim.Region.Communications.OGS1
839 } 868 }
840 catch (AuthenticationException e) 869 catch (AuthenticationException e)
841 { 870 {
871 NoteDeadRegion(regionHandle);
842 MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " + 872 MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " +
843 regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); 873 regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
844 MainLog.Instance.Debug(e.ToString()); 874 MainLog.Instance.Debug(e.ToString());
@@ -846,6 +876,7 @@ namespace OpenSim.Region.Communications.OGS1
846 } 876 }
847 catch (Exception e) 877 catch (Exception e)
848 { 878 {
879 NoteDeadRegion(regionHandle);
849 MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName + 880 MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName +
850 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); 881 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
851 MainLog.Instance.Debug(e.ToString()); 882 MainLog.Instance.Debug(e.ToString());
@@ -895,10 +926,12 @@ namespace OpenSim.Region.Communications.OGS1
895 } 926 }
896 //TODO need to see if we know about where this region is and use .net remoting 927 //TODO need to see if we know about where this region is and use .net remoting
897 // to inform it. 928 // to inform it.
929 NoteDeadRegion(regionHandle);
898 return false; 930 return false;
899 } 931 }
900 catch (RemotingException e) 932 catch (RemotingException e)
901 { 933 {
934 NoteDeadRegion(regionHandle);
902 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + 935 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName +
903 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); 936 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
904 MainLog.Instance.Debug(e.ToString()); 937 MainLog.Instance.Debug(e.ToString());
@@ -906,6 +939,7 @@ namespace OpenSim.Region.Communications.OGS1
906 } 939 }
907 catch 940 catch
908 { 941 {
942 NoteDeadRegion(regionHandle);
909 return false; 943 return false;
910 } 944 }
911 } 945 }
@@ -945,10 +979,12 @@ namespace OpenSim.Region.Communications.OGS1
945 } 979 }
946 //TODO need to see if we know about where this region is and use .net remoting 980 //TODO need to see if we know about where this region is and use .net remoting
947 // to inform it. 981 // to inform it.
982 NoteDeadRegion(regionHandle);
948 return false; 983 return false;
949 } 984 }
950 catch (RemotingException e) 985 catch (RemotingException e)
951 { 986 {
987 NoteDeadRegion(regionHandle);
952 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + 988 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName +
953 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); 989 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
954 MainLog.Instance.Debug(e.ToString()); 990 MainLog.Instance.Debug(e.ToString());
@@ -956,6 +992,7 @@ namespace OpenSim.Region.Communications.OGS1
956 } 992 }
957 catch 993 catch
958 { 994 {
995 NoteDeadRegion(regionHandle);
959 return false; 996 return false;
960 } 997 }
961 } 998 }
@@ -994,10 +1031,12 @@ namespace OpenSim.Region.Communications.OGS1
994 } 1031 }
995 //TODO need to see if we know about where this region is and use .net remoting 1032 //TODO need to see if we know about where this region is and use .net remoting
996 // to inform it. 1033 // to inform it.
1034 NoteDeadRegion(regionHandle);
997 return false; 1035 return false;
998 } 1036 }
999 catch (RemotingException e) 1037 catch (RemotingException e)
1000 { 1038 {
1039 NoteDeadRegion(regionHandle);
1001 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region to tell it to close child agents: " + regInfo.RegionName + 1040 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region to tell it to close child agents: " + regInfo.RegionName +
1002 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); 1041 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
1003 //MainLog.Instance.Debug(e.ToString()); 1042 //MainLog.Instance.Debug(e.ToString());
@@ -1006,6 +1045,7 @@ namespace OpenSim.Region.Communications.OGS1
1006 1045
1007 catch (SocketException e) 1046 catch (SocketException e)
1008 { 1047 {
1048 NoteDeadRegion(regionHandle);
1009 MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region using tcp://" + 1049 MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region using tcp://" +
1010 regInfo.RemotingAddress + 1050 regInfo.RemotingAddress +
1011 ":" + regInfo.RemotingPort + 1051 ":" + regInfo.RemotingPort +
@@ -1016,6 +1056,7 @@ namespace OpenSim.Region.Communications.OGS1
1016 } 1056 }
1017 catch (InvalidCredentialException e) 1057 catch (InvalidCredentialException e)
1018 { 1058 {
1059 NoteDeadRegion(regionHandle);
1019 MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region using tcp://" + 1060 MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region using tcp://" +
1020 regInfo.RemotingAddress + 1061 regInfo.RemotingAddress +
1021 ":" + regInfo.RemotingPort + 1062 ":" + regInfo.RemotingPort +
@@ -1025,6 +1066,7 @@ namespace OpenSim.Region.Communications.OGS1
1025 } 1066 }
1026 catch (AuthenticationException e) 1067 catch (AuthenticationException e)
1027 { 1068 {
1069 NoteDeadRegion(regionHandle);
1028 MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region using tcp://" + 1070 MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region using tcp://" +
1029 regInfo.RemotingAddress + 1071 regInfo.RemotingAddress +
1030 ":" + regInfo.RemotingPort + 1072 ":" + regInfo.RemotingPort +
@@ -1034,6 +1076,7 @@ namespace OpenSim.Region.Communications.OGS1
1034 } 1076 }
1035 catch (WebException e) 1077 catch (WebException e)
1036 { 1078 {
1079 NoteDeadRegion(regionHandle);
1037 MainLog.Instance.Warn("WebException exception: Unable to connect to adjacent region using tcp://" + 1080 MainLog.Instance.Warn("WebException exception: Unable to connect to adjacent region using tcp://" +
1038 regInfo.RemotingAddress + 1081 regInfo.RemotingAddress +
1039 ":" + regInfo.RemotingPort + 1082 ":" + regInfo.RemotingPort +
@@ -1043,6 +1086,7 @@ namespace OpenSim.Region.Communications.OGS1
1043 } 1086 }
1044 catch (Exception e) 1087 catch (Exception e)
1045 { 1088 {
1089 NoteDeadRegion(regionHandle);
1046 // This line errors with a Null Reference Exception.. Why? @.@ 1090 // This line errors with a Null Reference Exception.. Why? @.@
1047 //MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region using tcp://" + regInfo.RemotingAddress + 1091 //MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region using tcp://" + regInfo.RemotingAddress +
1048 // ":" + regInfo.RemotingPort + 1092 // ":" + regInfo.RemotingPort +
@@ -1091,11 +1135,21 @@ namespace OpenSim.Region.Communications.OGS1
1091 { 1135 {
1092 MainLog.Instance.Verbose("INTER", 1136 MainLog.Instance.Verbose("INTER",
1093 gdebugRegionName + "Incoming OGS1 RegionUpReport: " + "(" + regionData.RegionLocX + 1137 gdebugRegionName + "Incoming OGS1 RegionUpReport: " + "(" + regionData.RegionLocX +
1094 "," + regionData.RegionLocY + ")"); 1138 "," + regionData.RegionLocY + "). Giving this region a fresh set of 'dead' tries");
1095 1139
1096 try 1140 try
1097 { 1141 {
1142 lock (m_deadRegionCache)
1143 {
1144 if (m_deadRegionCache.ContainsKey(regionData.RegionHandle))
1145 {
1146
1147 m_deadRegionCache.Remove(regionData.RegionHandle);
1148 }
1149 }
1150
1098 return m_localBackend.TriggerRegionUp(new RegionInfo(regionData), regionhandle); 1151 return m_localBackend.TriggerRegionUp(new RegionInfo(regionData), regionhandle);
1152
1099 } 1153 }
1100 1154
1101 catch (RemotingException e) 1155 catch (RemotingException e)
@@ -1107,7 +1161,7 @@ namespace OpenSim.Region.Communications.OGS1
1107 1161
1108 public bool TriggerChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) 1162 public bool TriggerChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
1109 { 1163 {
1110 MainLog.Instance.Verbose("INTER", "Incoming OGS1 Child Agent Data Update"); 1164 //MainLog.Instance.Verbose("INTER", "Incoming OGS1 Child Agent Data Update");
1111 1165
1112 try 1166 try
1113 { 1167 {
@@ -1227,6 +1281,20 @@ namespace OpenSim.Region.Communications.OGS1
1227 } 1281 }
1228 socket.Close(); 1282 socket.Close();
1229 } 1283 }
1284 public void NoteDeadRegion(ulong regionhandle)
1285 {
1286 lock (m_deadRegionCache)
1287 {
1288 if (m_deadRegionCache.ContainsKey(regionhandle))
1289 {
1290 m_deadRegionCache[regionhandle] = m_deadRegionCache[regionhandle] + 1;
1291 }
1292 else
1293 {
1294 m_deadRegionCache.Add(regionhandle, 1);
1295 }
1296 }
1297 }
1230 } 1298 }
1231 1299
1232} \ No newline at end of file 1300} \ No newline at end of file