diff --git a/OpenSim/Capabilities/Caps.cs b/OpenSim/Capabilities/Caps.cs
index 33d8e25ae9..7d5182db79 100644
--- a/OpenSim/Capabilities/Caps.cs
+++ b/OpenSim/Capabilities/Caps.cs
@@ -29,15 +29,12 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Concurrent;
-using System.IO;
using System.Reflection;
using System.Threading;
using log4net;
-using Nini.Config;
using OpenMetaverse;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
-using OpenSim.Services.Interfaces;
// using OpenSim.Region.Framework.Interfaces;
@@ -54,26 +51,23 @@ namespace OpenSim.Framework.Capabilities
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- private string m_httpListenerHostName;
- private uint m_httpListenPort;
+ private readonly string m_httpListenerHostName;
+ private readonly uint m_httpListenPort;
///
/// This is the uuid portion of every CAPS path. It is used to make capability urls private to the requester.
///
- private string m_capsObjectPath;
+ private readonly string m_capsObjectPath;
public string CapsObjectPath { get { return m_capsObjectPath; } }
- private CapsHandlers m_capsHandlers;
+ private readonly CapsHandlers m_capsHandlers;
+ private readonly ConcurrentDictionary m_pollServiceHandlers = new ();
+ private readonly Dictionary m_externalCapsHandlers = new ();
- private ConcurrentDictionary m_pollServiceHandlers
- = new ConcurrentDictionary();
-
- private Dictionary m_externalCapsHandlers = new Dictionary();
-
- private IHttpServer m_httpListener;
- private UUID m_agentID;
- private string m_regionName;
- private ManualResetEvent m_capsActive = new ManualResetEvent(false);
+ private readonly IHttpServer m_httpListener;
+ private readonly UUID m_agentID;
+ private readonly string m_regionName;
+ private ManualResetEvent m_capsActive = new(false);
public UUID AgentID
{
@@ -142,7 +136,7 @@ namespace OpenSim.Framework.Capabilities
m_httpListenPort = httpPort;
- if (httpServer != null && httpServer.UseSSL)
+ if (httpServer is not null && httpServer.UseSSL)
{
m_httpListenPort = httpServer.SSLPort;
httpListen = httpServer.SSLCommonName;
@@ -167,7 +161,7 @@ namespace OpenSim.Framework.Capabilities
GC.SuppressFinalize(this);
}
- protected void Dispose(bool disposing)
+ public void Dispose(bool disposing)
{
Flags = CapsFlags.None;
if (m_capsActive != null)
@@ -197,9 +191,9 @@ namespace OpenSim.Framework.Capabilities
public void RegisterPollHandler(string capName, PollServiceEventArgs pollServiceHandler)
{
-// m_log.DebugFormat(
-// "[CAPS]: Registering handler with name {0}, url {1} for {2}",
-// capName, pollServiceHandler.Url, m_agentID, m_regionName);
+ //m_log.DebugFormat(
+ // "[CAPS]: Registering handler with name {0}, url {1} for {2}",
+ // capName, pollServiceHandler.Url, m_agentID, m_regionName);
if(!m_pollServiceHandlers.TryAdd(capName, pollServiceHandler))
{
@@ -211,19 +205,19 @@ namespace OpenSim.Framework.Capabilities
m_httpListener.AddPollServiceHTTPHandler(pollServiceHandler);
-// uint port = (MainServer.Instance == null) ? 0 : MainServer.Instance.Port;
-// string protocol = "http";
-// string hostName = m_httpListenerHostName;
-//
-// if (MainServer.Instance.UseSSL)
-// {
-// hostName = MainServer.Instance.SSLCommonName;
-// port = MainServer.Instance.SSLPort;
-// protocol = "https";
-// }
+ //uint port = (MainServer.Instance == null) ? 0 : MainServer.Instance.Port;
+ //string protocol = "http";
+ //string hostName = m_httpListenerHostName;
-// RegisterHandler(
-// capName, String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, pollServiceHandler.Url));
+ //if (MainServer.Instance.UseSSL)
+ //{
+ // hostName = MainServer.Instance.SSLCommonName;
+ // port = MainServer.Instance.SSLPort;
+ // protocol = "https";
+ //}
+
+ //RegisterHandler(
+ // capName, String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, pollServiceHandler.Url));
}
///
@@ -253,7 +247,6 @@ namespace OpenSim.Framework.Capabilities
}
m_pollServiceHandlers.Clear();
}
-
public bool TryGetPollHandler(string name, out PollServiceEventArgs pollHandler)
{
return m_pollServiceHandlers.TryGetValue(name, out pollHandler);
@@ -281,7 +274,7 @@ namespace OpenSim.Framework.Capabilities
continue;
string hostName = m_httpListenerHostName;
- uint port = (MainServer.Instance == null) ? 0 : MainServer.Instance.Port;
+ uint port = (MainServer.Instance is null) ? 0 : MainServer.Instance.Port;
string protocol = "http";
if (MainServer.Instance.UseSSL)
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index c35e316c77..11d95bcedc 100755
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -1565,6 +1565,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
if (IsClientAuthorized(uccp, out AuthenticateResponse sessionInfo))
{
AgentCircuitData aCircuit = m_circuitManager.GetAgentCircuitData(uccp.CircuitCode.Code);
+ if(!string.IsNullOrEmpty(aCircuit.IPAddress))
+ {
+ try
+ {
+ IPAddress aIP = IPAddress.Parse(aCircuit.IPAddress);
+ if(!endPoint.Address.Equals(aIP))
+ m_log.Debug($"[LLUDPSERVER]: HandleUseCircuitCode IP mismatch {endPoint.Address} != {aCircuit.IPAddress}");
+ }
+ catch
+ {
+ m_log.Debug($"[LLUDPSERVER]: HandleUseCircuitCode could not compare IP {endPoint.Address} {aCircuit.IPAddress}");
+ }
+ }
// Begin the process of adding the client to the simulator
client = AddClient(
@@ -1683,11 +1696,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
protected bool IsClientAuthorized(UseCircuitCodePacket useCircuitCode, out AuthenticateResponse sessionInfo)
{
- UUID agentID = useCircuitCode.CircuitCode.ID;
- UUID sessionID = useCircuitCode.CircuitCode.SessionID;
- uint circuitCode = useCircuitCode.CircuitCode.Code;
-
- sessionInfo = m_circuitManager.AuthenticateSession(sessionID, agentID, circuitCode);
+ UseCircuitCodePacket.CircuitCodeBlock ucb = useCircuitCode.CircuitCode;
+ sessionInfo = m_circuitManager.AuthenticateSession(ucb.SessionID, ucb.ID, ucb.Code);
return sessionInfo.Authorised;
}
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index d8098857b4..c21ce5961c 100755
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -960,76 +960,83 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
///
private void UpdateKnownItem(IScenePresence sp, SceneObjectGroup grp, string scriptedState)
{
+ if(!grp.HasGroupChanged)
+ {
+ if (DebugLevel > 0)
+ {
+ m_log.Debug(
+ $"[ATTACHMENTS MODULE]: Don't need to update asset for unchanged attachment {grp.UUID}, attachpoint {grp.AttachmentPoint}");
+ }
+ return;
+ }
+
+ grp.HasGroupChanged = false;
+
+ if (m_invAccessModule is null)
+ return;
+
if (grp.FromItemID.IsZero())
{
// We can't save temp attachments
- grp.HasGroupChanged = false;
return;
}
- if(sp.IsNPC)
- return;
-
- if (grp.HasGroupChanged)
+ if (sp.IsNPC)
{
- m_log.Debug(
- $"[ATTACHMENTS MODULE]: Updating asset for attachment {grp.UUID}, attachpoint {grp.AttachmentPoint}");
+ return;
+ }
+
+ m_log.Debug($"[ATTACHMENTS MODULE]: Updating asset for attachment {grp.UUID}, attachpoint {grp.AttachmentPoint}");
+
+ InventoryItemBase item = m_scene.InventoryService.GetItem(sp.UUID, grp.FromItemID);
+ if (item is not null)
+ {
+ if (item.Owner.NotEqual(sp.UUID))
+ {
+ m_log.Debug($"[ATTACHMENTS MODULE]: Updating asset for attachment owner mismach: agent {sp.UUID}, owner{item.Owner}");
+ return;
+ }
string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(grp, scriptedState);
- InventoryItemBase item = m_scene.InventoryService.GetItem(sp.UUID, grp.FromItemID);
- if (item is not null)
- {
- // attach is rez, need to update permissions
- item.Flags &= ~(uint)(InventoryItemFlags.ObjectSlamPerm | InventoryItemFlags.ObjectOverwriteBase |
- InventoryItemFlags.ObjectOverwriteOwner | InventoryItemFlags.ObjectOverwriteGroup |
- InventoryItemFlags.ObjectOverwriteEveryone | InventoryItemFlags.ObjectOverwriteNextOwner);
+ // attach is rez, need to update permissions
+ item.Flags &= ~(uint)(InventoryItemFlags.ObjectSlamPerm | InventoryItemFlags.ObjectOverwriteBase |
+ InventoryItemFlags.ObjectOverwriteOwner | InventoryItemFlags.ObjectOverwriteGroup |
+ InventoryItemFlags.ObjectOverwriteEveryone | InventoryItemFlags.ObjectOverwriteNextOwner);
- uint permsBase = (uint)(PermissionMask.Copy | PermissionMask.Transfer |
- PermissionMask.Modify | PermissionMask.Move |
- PermissionMask.Export | PermissionMask.FoldedMask);
-
- permsBase &= grp.CurrentAndFoldedNextPermissions();
- permsBase |= (uint)PermissionMask.Move;
- item.BasePermissions = permsBase;
- item.CurrentPermissions = permsBase;
- item.NextPermissions = permsBase & grp.RootPart.NextOwnerMask | (uint)PermissionMask.Move;
- item.EveryOnePermissions = permsBase & grp.RootPart.EveryoneMask;
- item.GroupPermissions = permsBase & grp.RootPart.GroupMask;
- item.CurrentPermissions &=
- ((uint)PermissionMask.Copy |
- (uint)PermissionMask.Transfer |
- (uint)PermissionMask.Modify |
- (uint)PermissionMask.Move |
- (uint)PermissionMask.Export |
- (uint)PermissionMask.FoldedMask); // Preserve folded permissions ??
+ uint permsBase = (uint)(PermissionMask.Copy | PermissionMask.Transfer |
+ PermissionMask.Modify | PermissionMask.Move |
+ PermissionMask.Export | PermissionMask.FoldedMask);
- string name = grp.RootPart.Name;
- string desc = grp.RootPart.Description;
+ permsBase &= grp.CurrentAndFoldedNextPermissions();
+ permsBase |= (uint)PermissionMask.Move;
+ item.BasePermissions = permsBase;
+ item.CurrentPermissions = permsBase;
+ item.NextPermissions = permsBase & grp.RootPart.NextOwnerMask | (uint)PermissionMask.Move;
+ item.EveryOnePermissions = permsBase & grp.RootPart.EveryoneMask;
+ item.GroupPermissions = permsBase & grp.RootPart.GroupMask;
+ item.CurrentPermissions &=
+ ((uint)PermissionMask.Copy |
+ (uint)PermissionMask.Transfer |
+ (uint)PermissionMask.Modify |
+ (uint)PermissionMask.Move |
+ (uint)PermissionMask.Export |
+ (uint)PermissionMask.FoldedMask); // Preserve folded permissions ??
- AssetBase asset = m_scene.CreateAsset(
- name, desc,
- (sbyte)AssetType.Object,
- Utils.StringToBytes(sceneObjectXml),
- sp.UUID);
+ string name = grp.RootPart.Name;
+ string desc = grp.RootPart.Description;
- item.Name = name;
- item.Description = desc;
- item.AssetID = asset.FullID;
- item.AssetType = (int)AssetType.Object;
- item.InvType = (int)InventoryType.Object;
-
- m_invAccessModule?.UpdateInventoryItemAsset(sp.UUID, item, asset);
+ AssetBase asset = m_scene.CreateAsset(name, desc, (sbyte)AssetType.Object,
+ Utils.StringToBytes(sceneObjectXml), sp.UUID);
+ item.Name = name;
+ item.Description = desc;
+ item.AssetID = asset.FullID;
+ item.AssetType = (int)AssetType.Object;
+ item.InvType = (int)InventoryType.Object;
+
+ if(m_invAccessModule.UpdateInventoryItemAsset(sp.UUID, item, asset))
sp.ControllingClient?.SendInventoryItemCreateUpdate(item, 0);
- }
-
- grp.HasGroupChanged = false; // Prevent it being saved over and over
- }
- else if (DebugLevel > 0)
- {
- m_log.Debug(
- $"[ATTACHMENTS MODULE]: Don't need to update asset for unchanged attachment {grp.UUID}, attachpoint {grp.AttachmentPoint}");
}
}
diff --git a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
index 777ca6062b..6ff184c56a 100644
--- a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
@@ -120,16 +120,6 @@ namespace OpenSim.Region.CoreModules.Framework
public void CreateCaps(UUID agentId, uint circuitCode)
{
- int ts = Util.EnvironmentTickCount();
-/* this as no business here...
- * must be done elsewhere ( and is )
- int flags = m_scene.GetUserFlags(agentId);
-
- m_log.ErrorFormat("[CreateCaps]: banCheck {0} ", Util.EnvironmentTickCountSubtract(ts));
-
- if (m_scene.RegionInfo.EstateSettings.IsBanned(agentId, flags))
- return;
-*/
string capsObjectPath = GetCapsPath(agentId);
Caps caps;
lock (m_capsObjects)
@@ -138,9 +128,9 @@ namespace OpenSim.Region.CoreModules.Framework
{
if (capsObjectPath == oldCaps.CapsObjectPath)
{
-// m_log.WarnFormat(
-// "[CAPS]: Reusing caps for agent {0} in region {1}. Old caps path {2}, new caps path {3}. ",
-// agentId, m_scene.RegionInfo.RegionName, oldCaps.CapsObjectPath, capsObjectPath);
+ //m_log.WarnFormat(
+ // "[CAPS]: Reusing caps for agent {0} in region {1}. Old caps path {2}, new caps path {3}. ",
+ // agentId, m_scene.RegionInfo.RegionName, oldCaps.CapsObjectPath, capsObjectPath);
return;
}
else
@@ -156,22 +146,19 @@ namespace OpenSim.Region.CoreModules.Framework
}
}
-// m_log.DebugFormat(
-// "[CAPS]: Adding capabilities for agent {0} in {1} with path {2}",
-// agentId, m_scene.RegionInfo.RegionName, capsObjectPath);
+ //m_log.DebugFormat(
+ // "[CAPS]: Adding capabilities for agent {0} in {1} with path {2}",
+ // agentId, m_scene.RegionInfo.RegionName, capsObjectPath);
caps = new Caps(MainServer.Instance, m_scene.RegionInfo.ExternalHostName,
- (MainServer.Instance == null) ? 0: MainServer.Instance.Port,
+ (MainServer.Instance is null) ? 0: MainServer.Instance.Port,
capsObjectPath, agentId, m_scene.RegionInfo.RegionName);
- m_log.DebugFormat("[CreateCaps]: new caps agent {0}, circuit {1}, path {2}, time {3} ",agentId,
- circuitCode,caps.CapsObjectPath, Util.EnvironmentTickCountSubtract(ts));
+ m_log.Debug($"[CreateCaps]: new caps agent {agentId}, circuit {circuitCode}, path {caps.CapsObjectPath}");
m_capsObjects[circuitCode] = caps;
}
m_scene.EventManager.TriggerOnRegisterCaps(agentId, caps);
-// m_log.ErrorFormat("[CreateCaps]: end {0} ", Util.EnvironmentTickCountSubtract(ts));
-
}
public void RemoveCaps(UUID agentId, uint circuitCode)
@@ -299,8 +286,7 @@ namespace OpenSim.Region.CoreModules.Framework
{
foreach (KeyValuePair kvp in m_childrenSeeds[agentID])
{
- uint x, y;
- Util.RegionHandleToRegionLoc(kvp.Key, out x, out y);
+ Util.RegionHandleToRegionLoc(kvp.Key, out uint x, out uint y);
m_log.Info(" >> "+x+", "+y+": "+kvp.Value);
}
}
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index ce49cf02e6..c7544a37fa 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -423,22 +423,20 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
public virtual bool UpdateInventoryItemAsset(UUID ownerID, InventoryItemBase item, AssetBase asset)
{
- if (item != null && item.Owner == ownerID && asset != null)
+ if (item is not null && item.Owner.Equals(ownerID) && asset is not null)
{
-// m_log.DebugFormat(
-// "[INVENTORY ACCESS MODULE]: Updating item {0} {1} with new asset {2}",
-// item.Name, item.ID, asset.ID);
-
+ //m_log.DebugFormat(
+ // "[INVENTORY ACCESS MODULE]: Updating item {0} {1} with new asset {2}",
+ // item.Name, item.ID, asset.ID);
m_Scene.AssetService.Store(asset);
m_Scene.InventoryService.UpdateItem(item);
-
return true;
}
else
{
m_log.ErrorFormat("[INVENTORY ACCESS MODULE]: Given invalid item for inventory update: {0}",
- (item == null || asset == null? "null item or asset" : "wrong owner"));
+ (item is null || asset is null? "null item or asset" : "wrong owner"));
return false;
}
}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
index 9124e97842..3497f62f07 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
@@ -196,7 +196,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
if (m_scenes.TryGetValue(destination.RegionID, out Scene destScene))
{
-// m_log.DebugFormat("[LOCAL SIMULATION CONNECTOR]: Found region {0} to send SendCreateChildAgent", destination.RegionName);
+ //m_log.DebugFormat("[LOCAL SIMULATION CONNECTOR]: Found region {0} to send SendCreateChildAgent", destination.RegionName);
return destScene.NewUserConnection(aCircuit, teleportFlags, source, out reason);
}
@@ -268,7 +268,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
}
-
return m_scenes[destination.RegionID].QueryAccess(agentID, agentHomeURI, viaTeleport, position, features, out reason);
}
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index a3ae816536..7ca0129e18 100755
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3949,7 +3949,7 @@ namespace OpenSim.Region.Framework.Scenes
//
// TeleportFlags.ViaGodlikeLure - Border Crossing
// TeleportFlags.ViaLogin - Login
- // TeleportFlags.TeleportFlags.ViaLure - Teleport request sent by another user
+ // TeleportFlags.ViaLure - Teleport request sent by another user
// TeleportFlags.ViaLandmark | TeleportFlags.ViaLocation | TeleportFlags.ViaLandmark | TeleportFlags.Default - Regular Teleport
// Don't disable this log message - it's too helpful
@@ -3969,7 +3969,7 @@ namespace OpenSim.Region.Framework.Scenes
(source is null) ? "" : string.Format("From region {0} ({1}){2}", source.RegionName, source.RegionID, (source.RawServerURI is null) ? "" : " @ " + source.ServerURI)
);
-// m_log.DebugFormat("NewUserConnection stack {0}", Environment.StackTrace);
+ //m_log.DebugFormat("NewUserConnection stack {0}", Environment.StackTrace);
if (!LoginsEnabled)
{
@@ -4048,15 +4048,16 @@ namespace OpenSim.Region.Framework.Scenes
// vulnerable to an issue when a viewer quits a region without sending a proper logout but then
// re-establishes the connection on a relogin. This could wrongly set the DoNotCloseAfterTeleport
// flag when no teleport had taken place (and hence no close was going to come).
-// if (!acd.ChildrenCapSeeds.ContainsKey(RegionInfo.RegionHandle))
-// {
-// m_log.DebugFormat(
-// "[SCENE]: Setting DoNotCloseAfterTeleport for child scene presence {0} in {1} because source will attempt close.",
-// sp.Name, Name);
-//
-// sp.DoNotCloseAfterTeleport = true;
-// }
-// else if (EntityTransferModule.IsInTransit(sp.UUID))
+
+ //if (!acd.ChildrenCapSeeds.ContainsKey(RegionInfo.RegionHandle))
+ //{
+ // m_log.DebugFormat(
+ // "[SCENE]: Setting DoNotCloseAfterTeleport for child scene presence {0} in {1} because source will attempt close.",
+ // sp.Name, Name);
+
+ // sp.DoNotCloseAfterTeleport = true;
+ //}
+ //else if (EntityTransferModule.IsInTransit(sp.UUID))
sp.LifecycleState = ScenePresenceState.Running;
@@ -6035,8 +6036,6 @@ Environment.Exit(1);
return false;
}
-
-
AgentCircuitData aCircuit = m_authenticateHandler.GetAgentCircuitData(agentID);
// Fake AgentCircuitData to keep IAuthorizationModule smiling
aCircuit ??= new AgentCircuitData()
diff --git a/OpenSim/Services/PresenceService/PresenceService.cs b/OpenSim/Services/PresenceService/PresenceService.cs
index d61637b6fb..fb6ac37a2f 100644
--- a/OpenSim/Services/PresenceService/PresenceService.cs
+++ b/OpenSim/Services/PresenceService/PresenceService.cs
@@ -114,10 +114,11 @@ namespace OpenSim.Services.PresenceService
(presence == null) ? null : presence.RegionID.ToString());
bool ret = m_Database.Delete("SessionID", sessionID.ToString());
- if(inCache && presence != null)
+ if(inCache)
{
- BySessionCache.Remove(presence.SessionID);
- ByUserCache.Remove(presence.UserID);
+ BySessionCache.Remove(sessionID);
+ if(presence is not null)
+ ByUserCache.Remove(presence.UserID);
}
return ret;
}
@@ -125,7 +126,7 @@ namespace OpenSim.Services.PresenceService
public bool LogoutRegionAgents(UUID regionID)
{
PresenceData[] prevSessions = GetRegionAgents(regionID);
- if ((prevSessions == null) || (prevSessions.Length == 0))
+ if ((prevSessions is null) || (prevSessions.Length == 0))
return true;
m_log.DebugFormat("[PRESENCE SERVICE]: Logout users in region {0}", regionID);
@@ -136,7 +137,6 @@ namespace OpenSim.Services.PresenceService
ByUserCache.Remove(pd.UserID);
}
-
// There's a small chance that LogoutRegionAgents() will logout different users than the
// list that was logged above, but it's unlikely and not worth dealing with.