diff options
author | Adam Frisby | 2008-10-10 13:46:43 +0000 |
---|---|---|
committer | Adam Frisby | 2008-10-10 13:46:43 +0000 |
commit | fa55fc89d8ab014217b58f78829cce006186b486 (patch) | |
tree | bae5423a9fd2a71ca2d4f01615b3747336f48a29 | |
parent | * Just some OGP maintenance. Standards adherence type stuff. (diff) | |
download | opensim-SC-fa55fc89d8ab014217b58f78829cce006186b486.zip opensim-SC-fa55fc89d8ab014217b58f78829cce006186b486.tar.gz opensim-SC-fa55fc89d8ab014217b58f78829cce006186b486.tar.bz2 opensim-SC-fa55fc89d8ab014217b58f78829cce006186b486.tar.xz |
* Fixed a potential threading issue with EventQueueGet leading to spontaneous crashes.
-rw-r--r-- | OpenSim/Region/Environment/Modules/Framework/EventQueueGetModule.cs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/OpenSim/Region/Environment/Modules/Framework/EventQueueGetModule.cs b/OpenSim/Region/Environment/Modules/Framework/EventQueueGetModule.cs index 78e2df5..5f20dc1 100644 --- a/OpenSim/Region/Environment/Modules/Framework/EventQueueGetModule.cs +++ b/OpenSim/Region/Environment/Modules/Framework/EventQueueGetModule.cs | |||
@@ -132,12 +132,16 @@ namespace OpenSim.Region.Environment.Modules.Framework | |||
132 | 132 | ||
133 | private BlockingLLSDQueue GetQueue(UUID agentId) | 133 | private BlockingLLSDQueue GetQueue(UUID agentId) |
134 | { | 134 | { |
135 | if (!queues.ContainsKey(agentId)) | 135 | lock (queues) |
136 | { | 136 | { |
137 | m_log.DebugFormat("[EVENTQUEUE]: Adding new queue for agent {0} in region {1}", agentId, m_scene.RegionInfo.RegionName); | 137 | if (!queues.ContainsKey(agentId)) |
138 | queues[agentId] = new BlockingLLSDQueue(); | 138 | { |
139 | m_log.DebugFormat("[EVENTQUEUE]: Adding new queue for agent {0} in region {1}", agentId, | ||
140 | m_scene.RegionInfo.RegionName); | ||
141 | queues[agentId] = new BlockingLLSDQueue(); | ||
142 | } | ||
143 | return queues[agentId]; | ||
139 | } | 144 | } |
140 | return queues[agentId]; | ||
141 | } | 145 | } |
142 | 146 | ||
143 | 147 | ||
@@ -164,7 +168,10 @@ namespace OpenSim.Region.Environment.Modules.Framework | |||
164 | 168 | ||
165 | private void ClientClosed(UUID AgentID) | 169 | private void ClientClosed(UUID AgentID) |
166 | { | 170 | { |
167 | queues.Remove(AgentID); | 171 | lock (queues) |
172 | { | ||
173 | queues.Remove(AgentID); | ||
174 | } | ||
168 | List<UUID> removeitems = new List<UUID>(); | 175 | List<UUID> removeitems = new List<UUID>(); |
169 | lock (m_AvatarQueueUUIDMapping) | 176 | lock (m_AvatarQueueUUIDMapping) |
170 | { | 177 | { |