diff options
author | Justin Clarke Casey | 2008-05-16 16:37:31 +0000 |
---|---|---|
committer | Justin Clarke Casey | 2008-05-16 16:37:31 +0000 |
commit | 772f88d2e5f4824e06575650736ec11b6ea564d8 (patch) | |
tree | 3799fdede4c353124517e84215e7c981176cca2f | |
parent | add to / from hash mapping for grid serialization (diff) | |
download | opensim-SC-772f88d2e5f4824e06575650736ec11b6ea564d8.zip opensim-SC-772f88d2e5f4824e06575650736ec11b6ea564d8.tar.gz opensim-SC-772f88d2e5f4824e06575650736ec11b6ea564d8.tar.bz2 opensim-SC-772f88d2e5f4824e06575650736ec11b6ea564d8.tar.xz |
* Removing unnecessary LLUUID.Zero check from AssetCache
* This revision also includes a very temporary fix for the fact that NREs are received because of a missing avatar apperance in grid mode
-rw-r--r-- | OpenSim/Framework/Communications/Cache/AssetCache.cs | 120 | ||||
-rw-r--r-- | OpenSim/Framework/IAssetServer.cs | 7 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/ScenePresence.cs | 7 |
3 files changed, 69 insertions, 65 deletions
diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs index 0669ce9..e1d5d32 100644 --- a/OpenSim/Framework/Communications/Cache/AssetCache.cs +++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs | |||
@@ -371,85 +371,81 @@ namespace OpenSim.Framework.Communications.Cache | |||
371 | // See IAssetReceiver | 371 | // See IAssetReceiver |
372 | public void AssetReceived(AssetBase asset, bool IsTexture) | 372 | public void AssetReceived(AssetBase asset, bool IsTexture) |
373 | { | 373 | { |
374 | if (asset.FullID != LLUUID.Zero) // if it is set to zero then the asset wasn't found by the server | 374 | //check if it is a texture or not |
375 | //then add to the correct cache list | ||
376 | //then check for waiting requests for this asset/texture (in the Requested lists) | ||
377 | //and move those requests into the Requests list. | ||
378 | if (IsTexture) | ||
375 | { | 379 | { |
376 | //check if it is a texture or not | 380 | TextureImage image = new TextureImage(asset); |
377 | //then add to the correct cache list | 381 | if (!Textures.ContainsKey(image.FullID)) |
378 | //then check for waiting requests for this asset/texture (in the Requested lists) | ||
379 | //and move those requests into the Requests list. | ||
380 | |||
381 | if (IsTexture) | ||
382 | { | 382 | { |
383 | TextureImage image = new TextureImage(asset); | 383 | Textures.Add(image.FullID, image); |
384 | if (!Textures.ContainsKey(image.FullID)) | ||
385 | { | ||
386 | Textures.Add(image.FullID, image); | ||
387 | 384 | ||
388 | if (StatsManager.SimExtraStats != null) | 385 | if (StatsManager.SimExtraStats != null) |
389 | { | 386 | { |
390 | StatsManager.SimExtraStats.AddTexture(image); | 387 | StatsManager.SimExtraStats.AddTexture(image); |
391 | } | ||
392 | } | 388 | } |
393 | } | 389 | } |
394 | else | 390 | } |
391 | else | ||
392 | { | ||
393 | AssetInfo assetInf = new AssetInfo(asset); | ||
394 | if (!Assets.ContainsKey(assetInf.FullID)) | ||
395 | { | 395 | { |
396 | AssetInfo assetInf = new AssetInfo(asset); | 396 | Assets.Add(assetInf.FullID, assetInf); |
397 | if (!Assets.ContainsKey(assetInf.FullID)) | ||
398 | { | ||
399 | Assets.Add(assetInf.FullID, assetInf); | ||
400 | 397 | ||
401 | if (StatsManager.SimExtraStats != null) | 398 | if (StatsManager.SimExtraStats != null) |
402 | { | 399 | { |
403 | StatsManager.SimExtraStats.AddAsset(assetInf); | 400 | StatsManager.SimExtraStats.AddAsset(assetInf); |
404 | } | 401 | } |
405 | 402 | ||
406 | if (RequestedAssets.ContainsKey(assetInf.FullID)) | 403 | if (RequestedAssets.ContainsKey(assetInf.FullID)) |
407 | { | 404 | { |
408 | AssetRequest req = RequestedAssets[assetInf.FullID]; | 405 | AssetRequest req = RequestedAssets[assetInf.FullID]; |
409 | req.AssetInf = assetInf; | 406 | req.AssetInf = assetInf; |
410 | req.NumPackets = CalculateNumPackets(assetInf.Data); | 407 | req.NumPackets = CalculateNumPackets(assetInf.Data); |
411 | 408 | ||
412 | RequestedAssets.Remove(assetInf.FullID); | 409 | RequestedAssets.Remove(assetInf.FullID); |
413 | AssetRequests.Add(req); | 410 | AssetRequests.Add(req); |
414 | } | ||
415 | } | 411 | } |
416 | } | 412 | } |
413 | } | ||
414 | |||
415 | // Notify requesters for this asset | ||
416 | if (RequestLists.ContainsKey(asset.FullID)) | ||
417 | { | ||
418 | AssetRequestsList reqList = null; | ||
419 | lock (RequestLists) | ||
420 | { | ||
421 | //m_log.Info("AssetCache: Lock taken on requestLists (AssetReceived #1)"); | ||
422 | reqList = RequestLists[asset.FullID]; | ||
417 | 423 | ||
418 | // Notify requesters for this asset | 424 | } |
419 | if (RequestLists.ContainsKey(asset.FullID)) | 425 | //m_log.Info("AssetCache: Lock released on requestLists (AssetReceived #1)"); |
426 | if (reqList != null) | ||
420 | { | 427 | { |
421 | AssetRequestsList reqList = null; | 428 | //making a copy of the list is not ideal |
429 | //but the old method of locking around this whole block of code was causing a multi-thread lock | ||
430 | //between this and the TextureDownloadModule | ||
431 | //while the localAsset thread running this and trying to send a texture to the callback in the | ||
432 | //texturedownloadmodule , and hitting a lock in there. While the texturedownload thread (which was holding | ||
433 | // the lock in the texturedownload module) was trying to | ||
434 | //request a new asset and hitting a lock in here on the RequestLists. | ||
435 | |||
436 | List<NewAssetRequest> theseRequests = new List<NewAssetRequest>(reqList.Requests); | ||
437 | reqList.Requests.Clear(); | ||
438 | |||
422 | lock (RequestLists) | 439 | lock (RequestLists) |
423 | { | 440 | { |
424 | //m_log.Info("AssetCache: Lock taken on requestLists (AssetReceived #1)"); | 441 | // m_log.Info("AssetCache: Lock taken on requestLists (AssetReceived #2)"); |
425 | reqList = RequestLists[asset.FullID]; | 442 | RequestLists.Remove(asset.FullID); |
426 | |||
427 | } | 443 | } |
428 | //m_log.Info("AssetCache: Lock released on requestLists (AssetReceived #1)"); | 444 | //m_log.Info("AssetCache: Lock released on requestLists (AssetReceived #2)"); |
429 | if (reqList != null) | ||
430 | { | ||
431 | //making a copy of the list is not ideal | ||
432 | //but the old method of locking around this whole block of code was causing a multi-thread lock | ||
433 | //between this and the TextureDownloadModule | ||
434 | //while the localAsset thread running this and trying to send a texture to the callback in the | ||
435 | //texturedownloadmodule , and hitting a lock in there. While the texturedownload thread (which was holding | ||
436 | // the lock in the texturedownload module) was trying to | ||
437 | //request a new asset and hitting a lock in here on the RequestLists. | ||
438 | |||
439 | List<NewAssetRequest> theseRequests = new List<NewAssetRequest>(reqList.Requests); | ||
440 | reqList.Requests.Clear(); | ||
441 | |||
442 | lock (RequestLists) | ||
443 | { | ||
444 | // m_log.Info("AssetCache: Lock taken on requestLists (AssetReceived #2)"); | ||
445 | RequestLists.Remove(asset.FullID); | ||
446 | } | ||
447 | //m_log.Info("AssetCache: Lock released on requestLists (AssetReceived #2)"); | ||
448 | 445 | ||
449 | foreach (NewAssetRequest req in theseRequests) | 446 | foreach (NewAssetRequest req in theseRequests) |
450 | { | 447 | { |
451 | req.Callback(asset.FullID, asset); | 448 | req.Callback(asset.FullID, asset); |
452 | } | ||
453 | } | 449 | } |
454 | } | 450 | } |
455 | } | 451 | } |
diff --git a/OpenSim/Framework/IAssetServer.cs b/OpenSim/Framework/IAssetServer.cs index 06a7e32..70feb74 100644 --- a/OpenSim/Framework/IAssetServer.cs +++ b/OpenSim/Framework/IAssetServer.cs | |||
@@ -41,7 +41,10 @@ namespace OpenSim.Framework | |||
41 | void Close(); | 41 | void Close(); |
42 | } | 42 | } |
43 | 43 | ||
44 | // could change to delegate? | 44 | /// <summary> |
45 | /// Implemented by classes which with to asynchronously receive asset data from the asset service | ||
46 | /// </summary> | ||
47 | /// <remarks>could change to delegate?</remarks> | ||
45 | public interface IAssetReceiver | 48 | public interface IAssetReceiver |
46 | { | 49 | { |
47 | /// <summary> | 50 | /// <summary> |
@@ -62,4 +65,4 @@ namespace OpenSim.Framework | |||
62 | { | 65 | { |
63 | IAssetServer GetAssetServer(); | 66 | IAssetServer GetAssetServer(); |
64 | } | 67 | } |
65 | } \ No newline at end of file | 68 | } |
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 44805cc..bdf1bba 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs | |||
@@ -1451,9 +1451,14 @@ namespace OpenSim.Region.Environment.Scenes | |||
1451 | /// | 1451 | /// |
1452 | /// </summary> | 1452 | /// </summary> |
1453 | public void SendInitialData() | 1453 | public void SendInitialData() |
1454 | { | 1454 | { |
1455 | // justincc - very temporary fix for the fact that m_apperance appears to be null at this point in grid mode | ||
1456 | if (null == m_appearance) | ||
1457 | m_appearance = new AvatarAppearance(); | ||
1458 | |||
1455 | m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_uuid, LocalId, | 1459 | m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_uuid, LocalId, |
1456 | m_pos, m_appearance.Texture.ToBytes(), m_parentID); | 1460 | m_pos, m_appearance.Texture.ToBytes(), m_parentID); |
1461 | |||
1457 | if (!m_isChildAgent) | 1462 | if (!m_isChildAgent) |
1458 | { | 1463 | { |
1459 | m_scene.InformClientOfNeighbours(this); | 1464 | m_scene.InformClientOfNeighbours(this); |