diff options
author | Justin Clark-Casey (justincc) | 2011-11-15 23:12:41 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2011-11-15 23:12:41 +0000 |
commit | 5b9fe4497df2aef7411a81517525fc2d7456420d (patch) | |
tree | 8227d9edb0b856e943f08442c0c187b2cecae226 /OpenSim/Region/CoreModules | |
parent | improve formatting of "show threads" (diff) | |
download | opensim-SC-5b9fe4497df2aef7411a81517525fc2d7456420d.zip opensim-SC-5b9fe4497df2aef7411a81517525fc2d7456420d.tar.gz opensim-SC-5b9fe4497df2aef7411a81517525fc2d7456420d.tar.bz2 opensim-SC-5b9fe4497df2aef7411a81517525fc2d7456420d.tar.xz |
Do proper locking of UserManagementModule.m_UserCache when getting.
This might help with
[USER AGENT CONNECTOR]: new connector to ()
[USER AGENT CONNECTOR]: Unable to contact remote server for GetServerURLs
[USER AGENT CONNECTOR]: Malformed Uri : Argument cannot be null.
Parameter name: uriString
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | 86 |
1 files changed, 57 insertions, 29 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index bef0d69..55279cc 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | |||
@@ -130,7 +130,9 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
130 | public void Close() | 130 | public void Close() |
131 | { | 131 | { |
132 | m_Scenes.Clear(); | 132 | m_Scenes.Clear(); |
133 | m_UserCache.Clear(); | 133 | |
134 | lock (m_UserCache) | ||
135 | m_UserCache.Clear(); | ||
134 | } | 136 | } |
135 | 137 | ||
136 | #endregion ISharedRegionModule | 138 | #endregion ISharedRegionModule |
@@ -188,11 +190,14 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
188 | { | 190 | { |
189 | string[] returnstring = new string[2]; | 191 | string[] returnstring = new string[2]; |
190 | 192 | ||
191 | if (m_UserCache.ContainsKey(uuid)) | 193 | lock (m_UserCache) |
192 | { | 194 | { |
193 | returnstring[0] = m_UserCache[uuid].FirstName; | 195 | if (m_UserCache.ContainsKey(uuid)) |
194 | returnstring[1] = m_UserCache[uuid].LastName; | 196 | { |
195 | return returnstring; | 197 | returnstring[0] = m_UserCache[uuid].FirstName; |
198 | returnstring[1] = m_UserCache[uuid].LastName; | ||
199 | return returnstring; | ||
200 | } | ||
196 | } | 201 | } |
197 | 202 | ||
198 | UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(UUID.Zero, uuid); | 203 | UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(UUID.Zero, uuid); |
@@ -237,22 +242,35 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
237 | 242 | ||
238 | public string GetUserHomeURL(UUID userID) | 243 | public string GetUserHomeURL(UUID userID) |
239 | { | 244 | { |
240 | if (m_UserCache.ContainsKey(userID)) | 245 | lock (m_UserCache) |
241 | return m_UserCache[userID].HomeURL; | 246 | { |
247 | if (m_UserCache.ContainsKey(userID)) | ||
248 | return m_UserCache[userID].HomeURL; | ||
249 | } | ||
242 | 250 | ||
243 | return string.Empty; | 251 | return string.Empty; |
244 | } | 252 | } |
245 | 253 | ||
246 | public string GetUserServerURL(UUID userID, string serverType) | 254 | public string GetUserServerURL(UUID userID, string serverType) |
247 | { | 255 | { |
248 | if (m_UserCache.ContainsKey(userID)) | 256 | lock (m_UserCache) |
257 | m_UserCache.TryGetValue(userID, out userdata); | ||
258 | |||
259 | if (userdata != null) | ||
249 | { | 260 | { |
250 | UserData userdata = m_UserCache[userID]; | 261 | // m_log.DebugFormat("[USER MANAGEMENT MODULE]: Requested url type {0} for {1}", serverType, userID); |
262 | |||
251 | if (userdata.ServerURLs != null && userdata.ServerURLs.ContainsKey(serverType) && userdata.ServerURLs[serverType] != null) | 263 | if (userdata.ServerURLs != null && userdata.ServerURLs.ContainsKey(serverType) && userdata.ServerURLs[serverType] != null) |
264 | { | ||
252 | return userdata.ServerURLs[serverType].ToString(); | 265 | return userdata.ServerURLs[serverType].ToString(); |
266 | } | ||
253 | 267 | ||
254 | if (userdata.HomeURL != string.Empty) | 268 | if (userdata.HomeURL != string.Empty) |
255 | { | 269 | { |
270 | // m_log.DebugFormat( | ||
271 | // "[USER MANAGEMENT MODULE]: Did not find url type {0} so requesting urls from {1} for {2}", | ||
272 | // serverType, userdata.HomeURL, userID); | ||
273 | |||
256 | UserAgentServiceConnector uConn = new UserAgentServiceConnector(userdata.HomeURL); | 274 | UserAgentServiceConnector uConn = new UserAgentServiceConnector(userdata.HomeURL); |
257 | userdata.ServerURLs = uConn.GetServerURLs(userID); | 275 | userdata.ServerURLs = uConn.GetServerURLs(userID); |
258 | if (userdata.ServerURLs != null && userdata.ServerURLs.ContainsKey(serverType) && userdata.ServerURLs[serverType] != null) | 276 | if (userdata.ServerURLs != null && userdata.ServerURLs.ContainsKey(serverType) && userdata.ServerURLs[serverType] != null) |
@@ -269,9 +287,11 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
269 | if (account != null) | 287 | if (account != null) |
270 | return userID.ToString(); | 288 | return userID.ToString(); |
271 | 289 | ||
272 | if (m_UserCache.ContainsKey(userID)) | 290 | lock (m_UserCache) |
291 | m_UserCache.TryGetValue(userID, out ud); | ||
292 | |||
293 | if (ud != null) | ||
273 | { | 294 | { |
274 | UserData ud = m_UserCache[userID]; | ||
275 | string homeURL = ud.HomeURL; | 295 | string homeURL = ud.HomeURL; |
276 | string first = ud.FirstName, last = ud.LastName; | 296 | string first = ud.FirstName, last = ud.LastName; |
277 | if (ud.LastName.StartsWith("@")) | 297 | if (ud.LastName.StartsWith("@")) |
@@ -291,8 +311,11 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
291 | 311 | ||
292 | public void AddUser(UUID uuid, string first, string last) | 312 | public void AddUser(UUID uuid, string first, string last) |
293 | { | 313 | { |
294 | if (m_UserCache.ContainsKey(uuid)) | 314 | lock (m_UserCache) |
295 | return; | 315 | { |
316 | if (m_UserCache.ContainsKey(uuid)) | ||
317 | return; | ||
318 | } | ||
296 | 319 | ||
297 | UserData user = new UserData(); | 320 | UserData user = new UserData(); |
298 | user.Id = uuid; | 321 | user.Id = uuid; |
@@ -310,8 +333,11 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
310 | 333 | ||
311 | public void AddUser(UUID id, string creatorData) | 334 | public void AddUser(UUID id, string creatorData) |
312 | { | 335 | { |
313 | if (m_UserCache.ContainsKey(id)) | 336 | lock (m_UserCache) |
314 | return; | 337 | { |
338 | if (m_UserCache.ContainsKey(id)) | ||
339 | return; | ||
340 | } | ||
315 | 341 | ||
316 | // m_log.DebugFormat("[USER MANAGEMENT MODULE]: Adding user with id {0}, craetorData {1}", id, creatorData); | 342 | // m_log.DebugFormat("[USER MANAGEMENT MODULE]: Adding user with id {0}, craetorData {1}", id, creatorData); |
317 | 343 | ||
@@ -402,22 +428,24 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
402 | 428 | ||
403 | private void HandleShowUsers(string module, string[] cmd) | 429 | private void HandleShowUsers(string module, string[] cmd) |
404 | { | 430 | { |
405 | if (m_UserCache.Count == 0) | 431 | lock (m_UserCache) |
406 | { | 432 | { |
407 | MainConsole.Instance.Output("No users not found"); | 433 | if (m_UserCache.Count == 0) |
434 | { | ||
435 | MainConsole.Instance.Output("No users not found"); | ||
436 | return; | ||
437 | } | ||
438 | |||
439 | MainConsole.Instance.Output("UUID User Name"); | ||
440 | MainConsole.Instance.Output("-----------------------------------------------------------------------------"); | ||
441 | foreach (KeyValuePair<UUID, UserData> kvp in m_UserCache) | ||
442 | { | ||
443 | MainConsole.Instance.Output(String.Format("{0} {1} {2}", | ||
444 | kvp.Key, kvp.Value.FirstName, kvp.Value.LastName)); | ||
445 | } | ||
446 | |||
408 | return; | 447 | return; |
409 | } | 448 | } |
410 | |||
411 | MainConsole.Instance.Output("UUID User Name"); | ||
412 | MainConsole.Instance.Output("-----------------------------------------------------------------------------"); | ||
413 | foreach (KeyValuePair<UUID, UserData> kvp in m_UserCache) | ||
414 | { | ||
415 | MainConsole.Instance.Output(String.Format("{0} {1} {2}", | ||
416 | kvp.Key, kvp.Value.FirstName, kvp.Value.LastName)); | ||
417 | } | ||
418 | return; | ||
419 | } | 449 | } |
420 | |||
421 | |||
422 | } | 450 | } |
423 | } | 451 | } \ No newline at end of file |