diff options
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs index 5b228ee..7165cb6 100644 --- a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs | |||
@@ -62,6 +62,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
62 | // count. The entries are removed when the interest count reaches 0. | 62 | // count. The entries are removed when the interest count reaches 0. |
63 | Dictionary<UUID,UUID> classifiedCache = new Dictionary<UUID, UUID>(); | 63 | Dictionary<UUID,UUID> classifiedCache = new Dictionary<UUID, UUID>(); |
64 | Dictionary<UUID,int> classifiedInterest = new Dictionary<UUID, int>(); | 64 | Dictionary<UUID,int> classifiedInterest = new Dictionary<UUID, int>(); |
65 | Object classifiedLock; | ||
65 | 66 | ||
66 | public Scene Scene | 67 | public Scene Scene |
67 | { | 68 | { |
@@ -326,14 +327,20 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
326 | string name = m["name"].AsString(); | 327 | string name = m["name"].AsString(); |
327 | 328 | ||
328 | classifieds[cid] = name; | 329 | classifieds[cid] = name; |
329 | 330 | ||
330 | if(!classifiedCache.ContainsKey(cid)) | 331 | if(!classifiedCache.ContainsKey(cid)) |
331 | { | 332 | { |
332 | classifiedCache.Add(cid,creatorId); | 333 | // lock(classifiedLock) |
333 | classifiedInterest.Add(cid, 0); | 334 | // { |
335 | lock(classifiedCache) | ||
336 | classifiedCache.Add(cid,creatorId); | ||
337 | lock(classifiedInterest) | ||
338 | classifiedInterest.Add(cid, 0); | ||
339 | // } | ||
334 | } | 340 | } |
335 | 341 | ||
336 | classifiedInterest[cid] ++; | 342 | lock(classifiedInterest) |
343 | classifiedInterest[cid] ++; | ||
337 | } | 344 | } |
338 | 345 | ||
339 | remoteClient.SendAvatarClassifiedReply(new UUID(args[0]), classifieds); | 346 | remoteClient.SendAvatarClassifiedReply(new UUID(args[0]), classifieds); |
@@ -346,22 +353,20 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
346 | ad.ClassifiedId = queryClassifiedID; | 353 | ad.ClassifiedId = queryClassifiedID; |
347 | 354 | ||
348 | if(classifiedCache.ContainsKey(queryClassifiedID)) | 355 | if(classifiedCache.ContainsKey(queryClassifiedID)) |
349 | { | 356 | { |
350 | target = classifiedCache[queryClassifiedID]; | 357 | target = classifiedCache[queryClassifiedID]; |
351 | 358 | ||
352 | if(classifiedInterest[queryClassifiedID] -- == 0) | 359 | lock(classifiedInterest) |
360 | classifiedInterest[queryClassifiedID] --; | ||
361 | |||
362 | if(classifiedInterest[queryClassifiedID] == 0) | ||
353 | { | 363 | { |
364 | lock(classifiedInterest) | ||
365 | classifiedInterest.Remove(queryClassifiedID); | ||
354 | lock(classifiedCache) | 366 | lock(classifiedCache) |
355 | { | ||
356 | lock(classifiedInterest) | ||
357 | { | ||
358 | classifiedInterest.Remove(queryClassifiedID); | ||
359 | } | ||
360 | classifiedCache.Remove(queryClassifiedID); | 367 | classifiedCache.Remove(queryClassifiedID); |
361 | } | ||
362 | } | 368 | } |
363 | } | 369 | } |
364 | |||
365 | 370 | ||
366 | string serverURI = string.Empty; | 371 | string serverURI = string.Empty; |
367 | bool foreign = GetUserProfileServerURI(target, out serverURI); | 372 | bool foreign = GetUserProfileServerURI(target, out serverURI); |