aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs37
1 files changed, 21 insertions, 16 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs
index b4785f4..3afaba5 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs
@@ -60,8 +60,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
60 60
61 // If not, go get them and place them in the cache 61 // If not, go get them and place them in the cache
62 Dictionary<AssetType, InventoryFolderBase> folders = GetSystemFolders(presence.UUID); 62 Dictionary<AssetType, InventoryFolderBase> folders = GetSystemFolders(presence.UUID);
63 m_log.DebugFormat("[INVENTORY CACHE]: OnMakeRootAgent, fetched system folders for {0} {1}: count {2}", 63 m_log.DebugFormat("[INVENTORY CACHE]: OnMakeRootAgent in {0}, fetched system folders for {1} {2}: count {3}",
64 presence.Firstname, presence.Lastname, folders.Count); 64 presence.Scene.RegionInfo.RegionName, presence.Firstname, presence.Lastname, folders.Count);
65 if (folders.Count > 0) 65 if (folders.Count > 0)
66 lock (m_InventoryCache) 66 lock (m_InventoryCache)
67 m_InventoryCache.Add(presence.UUID, folders); 67 m_InventoryCache.Add(presence.UUID, folders);
@@ -69,25 +69,30 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
69 69
70 void OnClientClosed(UUID clientID, Scene scene) 70 void OnClientClosed(UUID clientID, Scene scene)
71 { 71 {
72 ScenePresence sp = null; 72 if (m_InventoryCache.ContainsKey(clientID)) // if it's still in cache
73 foreach (Scene s in m_Scenes)
74 { 73 {
75 s.TryGetAvatar(clientID, out sp); 74 ScenePresence sp = null;
76 if ((sp != null) && !sp.IsChildAgent) 75 foreach (Scene s in m_Scenes)
77 { 76 {
78 m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, but user {1} still in sim. Keeping system folders in cache", 77 s.TryGetAvatar(clientID, out sp);
79 scene.RegionInfo.RegionName, clientID); 78 if ((sp != null) && !sp.IsChildAgent && (s != scene))
80 return; 79 {
80 m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, but user {1} still in sim. Keeping system folders in cache",
81 scene.RegionInfo.RegionName, clientID);
82 return;
83 }
81 } 84 }
82 }
83 85
84 m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, user {1} out of sim. Dropping system folders", 86 // Drop system folders
85 scene.RegionInfo.RegionName, clientID); 87 lock (m_InventoryCache)
86 // Drop system folders 88 if (m_InventoryCache.ContainsKey(clientID))
87 lock (m_InventoryCache) 89 {
88 if (m_InventoryCache.ContainsKey(clientID)) 90 m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, user {1} out of sim. Dropping system folders",
89 m_InventoryCache.Remove(clientID); 91 scene.RegionInfo.RegionName, clientID);
90 92
93 m_InventoryCache.Remove(clientID);
94 }
95 }
91 } 96 }
92 97
93 public abstract Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID); 98 public abstract Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID);